8 мин чтения

ЕГЭ по информатике 2026 · задание 22 из 27

ЕГЭ по информатике 2026, задание 22: параллельные процессы

Задание 22 — повышенный уровень, 1 балл. Строят модель процессов: кто от кого зависит и сколько длится. Это про независимые процессы, которые могут идти параллельно, а не про очередь «строго по одному».

Файл 2026 — `.ods`. Колонки обычно такие: идентификатор, время выполнения, номера процессов, которые должны завершиться раньше. Пустая ячейка зависимостей значит, что процесс можно начать сразу.

Конспект

Время старта процесса — 0, если предшественников нет, иначе максимум времён окончания предшественников. Окончание = старт + длительность.

Нужное в ответе бывает разным:

  • момент окончания заданного процесса;
  • сколько процессов выполняются в момент T, то есть старт ≤ T < окончание, либо с другими границами — смотрите «в момент» и «в течение»;
  • минимальное время всей работы — максимум окончаний;
  • сколько процессов не зависят друг от друга.

ФИПИ предупреждает: самая длинная цепочка по числу процессов не обязана быть самой длинной по времени. Ищите критический путь по сумме длительностей, а не по количеству звеньев.

Процесс не ждёт «всех, кто в таблице ниже». Он ждёт только перечисленных предшественников. Независимые процессы стартуют одновременно, если хватает процессоров. Если число процессоров ограничено, это уже другая модель: тогда нельзя запустить больше, чем есть процессоров, даже если зависимости позволяют. В большинстве вариантов процессоров хватает, ограничение — только зависимости. Прочитайте, есть ли лимит.

Время обычно целое. Если процесс длится 5 и стартовал в 0, в момент 5 он уже закончился, если интервал полуоткрытый. Условие «выполняется в момент t» надо сопоставить с тем, включается ли правый конец. На черновике нарисуйте отрезок для двух процессов и проверьте граничный момент, прежде чем писать формулу.

Шаблон на Python

# id -> (duration, list of prerequisite ids)
procs = {
    1: (4, []),
    2: (7, []),
    3: (3, [1, 2]),
    4: (2, [3]),
}

start = {}
finish = {}

def calc(i):
    if i in finish:
        return finish[i]
    dur, prev = procs[i]
    start[i] = max((calc(p) for p in prev), default=0)
    finish[i] = start[i] + dur
    return finish[i]

for i in procs:
    calc(i)

print(max(finish.values()))          # время всей работы
T = 5
running = [i for i in procs if start[i] <= T < finish[i]]
print(len(running), running)
print(finish[4])

Если идентификаторы в файле идут не по порядку и есть ссылка вперёд, рекурсия это переносит. Цикл зависимостей в условии не встречается. Если программа зациклилась, в данные попала ошибка чтения, не добавляйте setrecursionlimit вместо проверки файла.

Типичные ошибки

  • Время цепочки сложили как число процессов.
  • Процесс стартует после суммы предшественников, а не после максимума.
  • В момент T посчитан процесс, который в этот момент только что закончился.
  • Пустую ячейку прочитали как ноль и приняли ноль за идентификатор процесса.

Попробуйте объяснить с Мишкой

Бесплатный ИИ-репетитор объяснит любую тему так, как вам понятно — шаг за шагом.

Начать бесплатно