решай.ai · шпаргалка

Задание 22: Многопроцессорные системы

ЕГЭ Информатика

Как выглядит

Типовая формулировка звучит так: дана совокупность из NN процессов, каждый из которых характеризуется идентификатором, временем выполнения в миллисекундах и списком идентификаторов процессов, от которых он зависит. Если список пуст (стоит значение 0), процесс независим и может стартовать в любой момент. Процесс B зависит от процесса A означает, что B не может начаться, пока не завершится A. Все независимые друг от друга процессы могут выполняться параллельно (предполагается неограниченное число процессоров). Требуется найти минимальное время, через которое завершится выполнение всей совокупно …

Что нужно знать

  • Процесс — задача с фиксированным временем выполнения tt, которая может зависеть от других процессов.
  • Зависимость: если B зависит от A, то A должен полностью завершиться до старта B. Такие процессы выполняются строго последовательно.
  • Независимые процессы (без общих зависимостей друг от друга) выполняются параллельно — их времена не складываются, а идут «одновременно».
  • Время начала процесса определяется формулой: Tstart(B)=max⁡A∈Dep(B)Tfinish(A)T_{start}(B) = \max_{A \in \text{Dep}(B)} T_{finish}(A) где Dep(B)\text{Dep}(B) — множество процессов, от которых зависит B. Если B независим, Tstart(B)=0T_{start}(B) = 0.
  • Время завершения процесса: Tfinish(B)=Tstart(B)+t(B)T_{finish}(B) = T_{start}(B) + t(B)
  • Итоговый ответ задачи — максимальное время завершения среди всех процессов: Tanswer=max⁡BTfinish(B)T_{answer} = \max_{B} T_{finish}(B)
  • Граф зависимостей процессов — это ориентированный ациклический граф (DAG): вершины — процессы, рёбра идут от A к B, если B зависит от A. Обрабатывать вершины нужно в порядке топологической сортировки: сначала процессы без зависимостей, затем те, чьи «родители» уже обработаны.
  • Критический путь — самая длинная по суммарному времени цепочка последовательных зависимых процессов. Именно длина критического пути и есть минимальное время выполнения всей системы.

Алгоритм

  1. Выписать из таблицы/файла для каждого процесса: ID, время выполнения tt, список зависимостей (или 0, если процесс независим).
  2. Найти все процессы без зависимостей — для них Tstart=0T_{start} = 0, Tfinish=tT_{finish} = t.
  3. Определить порядок обработки оставшихся процессов так, чтобы к моменту расчёта процесса B все процессы из его списка зависимостей уже были обработаны (топологическая сортировка).
  4. Для каждого следующего процесса B вычислить: Tstart(B)=max⁡A∈Dep(B)Tfinish(A),Tfinish(B)=Tstart(B)+t(B)T_{start}(B) = \max_{A \in \text{Dep}(B)} T_{finish}(A), \qquad T_{finish}(B) = T_{start}(B) + t(B)
  5. Повторять шаг 4, пока не будут обработаны все процессы.
  6. Найти максимум среди всех TfinishT_{finish} — это и есть минимальное время выполнения всей совокупности процессов.
  7. Записать ответ как целое число миллисекунд.

Ловушки

  • Сложение времени независимых процессов вместо взятия максимума — частая ошибка, приводящая к завышенному ответу.
  • Неверное направление зависимости: если B зависит от A, то именно A выполняется первым, а не наоборот.
  • Учёт только одной зависимости из списка, когда их несколько (нужно брать максимум времени финиша среди всех процессов из списка, а не первого по порядку).
  • Нарушение порядка обработки: попытка посчитать время процесса раньше, чем найдены значения всех его предшественников, из-за чего используются нулевые или неверные промежуточные данные.
  • Итоговый ответ берётся не как максимум по всем процессам, а как время финиша последнего процесса в таблице — это неверно, если граф ветвится и есть несколько «конечных» процессов. …
reshay.ai/ege/informatika/zadanie-22 — задачи с разборами и тренажёр

Полный гайд и задачи задания 22 →