← Все вопросы

Как решать задание 22 ЕГЭ по информатике (процессы, многопоточность)?

Задан 12 месяцев назад1.1к просмотров2 ответа
8

Задание 22 про параллельные процессы в таблице: даны процессы, их длительность и от кого зависят (предшественники). Надо найти общее время выполнения. Как разобраться с заданием 22 про процессы на ЕГЭ?

2 ответа

11
✓ Принятый ответ — помог автору

Задание 22 — анализ зависимостей процессов. Дана таблица: ID процесса, его длительность T, и список процессов-предшественников B (которые должны завершиться раньше). Нужно найти минимальное общее время выполнения всех процессов (они идут параллельно, где можно).

Идея: время окончания процесса = его длительность + максимальное время окончания среди всех его предшественников. У процессов без предшественников старт в 0.

finish[p] = T[p] + max(finish[b] for b in предшественники p) (или просто T[p], если их нет).

Ответ — максимум по всем finish (момент, когда закончится самый поздний процесс).

На Python (обрабатывая в порядке зависимостей):

finish = {}
# при условии, что процессы заданы так, что предшественники идут раньше
for p in processes:           # p: (id, T, [предшественники])
    pid, t, preds = p
    start = max((finish[b] for b in preds), default=0)
    finish[pid] = start + t
print(max(finish.values()))

Частые ошибки:

  • складывать длительности всех процессов (это была бы последовательная работа — неверно, они параллельны);
  • брать сумму времён предшественников вместо максимума;
  • неверно прочитать столбец «программа B, требуемая для запуска» (это и есть предшественник).

Это, по сути, поиск самого длинного пути по графу зависимостей.

4

Главная мысль: процессы выполняются одновременно, если друг от друга не зависят. Поэтому общее время — это не сумма, а длина самой длинной цепочки зависимостей (критический путь).

Для каждого процесса считай момент завершения = его время + максимум среди завершений тех, кого он ждёт. Ответ — максимальный момент завершения по всей таблице. Если предшественников нет — стартует с нуля.

Ваш ответ

, чтобы ответить на вопрос.