Задание №22 — Многопоточность
В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы могут выполняться только последовательно. В файле информация о процессах представлена в виде таблицы. В первой колонке таблицы указан идентификатор процесса (ID), во второй колонке таблицы — время его выполнения в миллисекундах, в третьей колонке перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение 0. Время выполнения одного из процессов неизвестно и для данного процесса в соответствующей колонке обозначено как t.
Типовой пример организации данных в файле:
| ID процесса B | Время выполнения процесса B (мс) | ID процесса(ов) А |
| 1 | 4 | 0 |
| 2 | 3 | 0 |
| 3 | t | 1; 2 |
| 4 | 7 | 3 |
Определите максимальное возможное целочисленное t (время выполнения процесса), при котором выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно, завершилось не более чем за 19 мс.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.
Правильный ответ
9
Пояснение
Решение:
Момент завершения процесса равен , где — процессы, от которых он зависит; независимый процесс завершается в момент . Время работы всей совокупности — наибольшее из значений . При увеличении это время не убывает, поэтому нужно взять наибольшее целое , при котором оно ещё не превышает 19 мс.
Подставим и заполним столбец :
| ID процесса | Время выполнения, мс | Зависит от | Момент завершения, мс |
|---|---|---|---|
| 1 | 4 | 0 | 4 |
| 2 | 3 | 0 | 3 |
| 3 | 2 | 1; 2 | 6 |
| 4 | 3 | 3 | 9 |
| 5 | 0 | 9 | |
| 6 | 5 | 4; 5 | 14 |
| 7 | 5 | 0 | 5 |
| 8 | 6 | 7 | 11 |
| 9 | 5 | 6; 8 | 19 |
| 10 | 12 | 0 | 12 |
| 11 | 2 | 10 | 14 |
| 12 | 2 | 11 | 16 |
Наибольшее значение равно 19 мс, условие «не более 19 мс» выполнено. При общее время стало бы равно 20 мс, что больше 19, поэтому 9 — максимально возможное целое значение.
Тот же перебор программой:
# данные из прилагаемого файла; None — неизвестное время t
data = {
1: (4, []),
2: (3, []),
3: (2, [1, 2]),
4: (3, [3]),
5: (None, []),
6: (5, [4, 5]),
7: (5, []),
8: (6, [7]),
9: (5, [6, 8]),
10: (12, []),
11: (2, [10]),
12: (2, [11]),
}
def total(t):
finish = {}
for i in sorted(data):
dur, deps = data[i]
if dur is None:
dur = t
finish[i] = max([finish[d] for d in deps], default=0) + dur
return max(finish.values())
print(max(t for t in range(1, 1000) if total(t) <= 19))
Ответ: 9