ЕГЭ · ЗАДАНИЕ 22
Параллельные процессы · практика 17
В файле указаны ID процесса, его время и ID процессов-предшественников (0 — зависимостей нет). Независимые процессы выполняются параллельно, процессоров неограниченно много. Каждый процесс стартует сразу после завершения всех предшественников. Найдите минимальное время завершения всех процессов.
Учебная модель Академии С для проверки приёма. Не выдаётся за задание реального экзамена.
Файлы к заданию
ege-22-checkpoint-9.txtИсточник задания
Сначала попробуй решить самостоятельно, затем открой разбор. Для автоматической проверки ответа включи JavaScript.
Показать решение по шагам
Разбор решения
Ответ: 23
Решение по шагам
- Процессоры не ограничены, поэтому независимые процессы стартуют вместе в момент 0. Складывать длительности всех процессов нельзя.
- Для каждого процесса начало = максимальное время окончания его предшественников. Конец = начало + собственная длительность.
- После расчёта всей таблицы берём максимальное время окончания: 23.
| ID | Длительность | Зависит от | Начало | Конец |
|---|---|---|---|---|
| 1 | 3 | 0 | 0 | 3 |
| 2 | 5 | 0 | 0 | 5 |
| 3 | 2 | 1 | 3 | 5 |
| 4 | 5 | 1,2 | 5 | 10 |
| 5 | 9 | 2 | 5 | 14 |
| 6 | 2 | 3,4 | 10 | 12 |
| 7 | 4 | 4,5 | 14 | 18 |
| 8 | 5 | 6,7 | 18 | 23 |
Проверка на Python
from functools import lru_cache
rows = [line.strip().split(";") for line in open("ege-22-checkpoint-9.txt")][1:]
data = {int(i): (int(t), list(map(int, deps.split(",")))) for i, t, deps in rows}
@lru_cache(None)
def end(i):
if i == 0: return 0
duration, deps = data[i]
return duration + max(end(j) for j in deps)
print(max(end(i) for i in data))