Теория
Что нужно знать
- Процессы в современных компьютерах могут выполняться параллельно, если являются независимыми. Формула «процесс B зависит от процесса A» означает, что выполнение процесса B не может начаться раньше, чем выполнение процесса A (в таком случае A и B можно выполнять только последовательно).
Задание
В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты A; тогда процессы выполняются только последовательно. В первой строке таблицы указан идентификатор процесса (ID), во второй — время его выполнения (мс), в третьей — через «;» перечислены ID зависимостей (или 0 для независимого процесса). Требуется определить минимальное время, через которое завершится выполнение всей совокупности процессов, если все независимые процессы могут выполняться параллельно.
Подготовка таблицы
- Добавляем столбец «общее время» (С): ПКМ по C1 → «Вставить».
- Разбиваем столбец зависимостей на два (D и E) по максимальному числу зависимостей: «Данные → Текст по столбцам → С разделителями → Точка с запятой».
- Промежуточный результат: получаем таблицу с ID (A), длительностью (B), зависимостями D/E и пустым столбцом «Общее время» (C).
Идея расчёта «общего времени» (критический путь)
- Для независимых процессов (D=0) «общее время» на этапе их завершения равно их собственной длительности:
C = B. - Для зависимых процессов (D≠0) «общее время» равно времени самого длинного предыдущего пути плюс длительность текущего процесса:
C = B + max(C<sub>пред1</sub>, C<sub>пред2</sub>). - Чтобы взять «общее время» предшественников по их ID, используем ВПР; чтобы на пустых/нулевых зависимостях не было #Н/Д, оборачиваем в ЕСЛИОШИБКА и подставляем 0.
Формулы (LibreOffice Calc, RU)
- Пусть заголовки в строке 1; с 2-й строки идут данные. Тогда в C2:
=B2 + МАКС( ЕСЛИОШИБКА(ВПР(D2; $A$2:$C$9999; 3; 0); 0); ЕСЛИОШИБКА(ВПР(E2; $A$2:$C$9999; 3; 0); 0) )Эта одна формула корректно считает и независимые процессы (когда D=0/E пустые, оба ВПР дают 0), и зависимые (берём максимум из «общих времён» предшественников). Протягиваем вниз по всем строкам.
- Ответ по заданию «минимальное время завершения» — это
МАКС($C$2:$C$9999).
Общее решение
После протяжки формул по столбцу C достаточно взять максимум: это и есть время завершения всей совокупности (критический путь).
Диаграмма Ганта (визуальный контроль и альтернативный способ)
Строим Гант: по строкам — процессы, по оси X — миллисекунды; для каждого процесса рисуем «старт в самое раннее допустимое время» и длительность B. Для независимых — старт с 1-й мс; для зависимых — старт = максимум окончаний предков + 0. По диаграмме легко видеть параллельность и пересечения интервалов.
Примеры решений заданий
1) «Сколько процессов могут начаться не ранее чем с T-й мс?» (ASAP-план)
Постановка (пример из вопроса): для таблицы вида
«ID | Время (B) | Зависимости (D;E)» нужно определить максимальное количество процессов, которые начнутся не ранее чем с 8-й мс, при условии, что каждый процесс стартует в самое раннее допустимое время (ASAP) и приостановок нет. Нумерация мс — с 1-й.
Шаг 1. Ранние начала/окончания
- Раннее окончание (RO) процесса: это «общее время» из столбца C.
- Раннее начало (RN) процесса:
RN = RO - B + 1(с учётом, что считаем миллисекунды с 1-й). В Calc:=C2 - B2 + 1
Шаг 2. Считаем, сколько RN ≥ T
- Заводим столбец F = RN. Затем:
=СЧЁТЕСЛИ($F$2:$F$9999; ">=8")— это и есть требуемое количество процессов, которые могут начаться не ранее чем с 8-й мс.
Замечание по примеру из условия
В типовом примере из задания (для T=6 мс) ответ 2 (процессы 3 и 5). Наш расчёт даёт то же самое: RN(3)=8, RN(5)=6 — оба удовлетворяют условию «не ранее 6». Всё определяется формулами RN/RO, без ручного перебора.
2) «Максимальная продолжительность интервала, в течение которого параллельно идут как минимум K процессов» (диаграмма Ганта)
Постановка (пример из вопроса): требуется найти максимальную продолжительность отрезка времени, на котором одновременно выполняются пять процессов, причём все независимые процессы можно запускать параллельно. В таких задачах (когда независимые процессы «можно двигать») удобнее использовать диаграмму Ганта или «сканирующую линию».
Подход 2А. Через диаграмму Ганта (Calc, наглядно)
- Сначала посчитайте ASAP-расписание (RN/RO) по формулам из «Теории» (это даст нижнюю границу старта для зависимых процессов).
- Для независимых процессов допускается «сдвиг вправо» (они не обязаны стартовать в 1-ю мс, если задача это разрешает). Чтобы нарастить «плато» из 5 параллельных, разносим независимые и зависимые с учётом их длительностей, создавая полосу максимальной высоты ≥5.
- Построение: в отдельном листе создайте шкалу времени по столбцам (1…Tmax=МАКС(C)) и условным форматированием/формулами залейте клетки [RN … RO] для каждого процесса. Далее в строке «Сумма по столбцу t» посчитайте:
=СУММПРОИЗВ( (t>=RN_i) * (t<=RO_i) )(через массивные формулы/ПОИСКПОЗ/СЧЁТЕСЛИ.МН). Максимальная длина непрерывного участка, где сумма ≥5, и будет ответом.
Подход 2Б. «Сканирующая линия» (быстро и без рисунка)
- Сформируйте таблицу событий: для каждого процесса две строки —
(RN; +1)и(RO+1; −1). - Отсортируйте по времени, ведите префиксную сумму
cnt(t)— это число одновременно работающих процессов. - Перебирая события, отмечайте самые длинные промежутки, где
cnt ≥ 5. Это даёт ту же величину, что и Гант, но без отрисовки.
Почему здесь лучше Гант, а не только ВПР
Способ с ВПР идеален, когда процессов много и все запускаются «как можно раньше» (ASAP). Если же независимые процессы можно «передвигать», задача превращается в отыскание максимального перекрытия интервалов — визуально и логически это проще довести до ответа через Гант/сканирующую линию (мы контролируем реальные перекрытия, а не только ранние старты).
3) «Минимальное время завершения всех процессов»
Это основное задание со слайдов. Алгоритм целиком совпадает с «Теорией»: один столбец «общее время» (C) по формуле с ВПР/ЕСЛИОШИБКА/МАКС, ответ — МАКС(C). :contentReference[oaicite:12]{index=12}
- Общее время (C2):
=B2 + МАКС( ЕСЛИОШИБКА(ВПР(D2; $A$2:$C$9999; 3; 0); 0); ЕСЛИОШИБКА(ВПР(E2; $A$2:$C$9999; 3; 0); 0) ) - Раннее начало (F2):
=C2 - B2 + 1 - Сколько процессов начнутся не ранее T (например, 8):
=СЧЁТЕСЛИ($F$2:$F$9999; ">=8") - Минимальное время завершения всех процессов:
=МАКС($C$2:$C$9999)
4) Мини-чек-лист по типовым заданиям
- ASAP-план (все стартуют как можно раньше): считайте общее время (C) и RN=RO−B+1; далее любые вопросы по «кто позже/раньше T» решаются через RN.
- Если можно сдвигать независимые группы во времени — используйте диаграмму Ганта или «сканирующую линию» для подсчёта максимального перекрытия K процессов.
- Не допускается приостановка процесса: интервалы целые и непрерывные.
- Зависимости «A;B;…» означают: старт B возможен только после завершения всех указанных предков (берём максимум их RO).
Задания для подготовки
Простые
- https://kompege.ru/task?id=4708 Смотреть разбор
- https://kompege.ru/task?id=4793
- https://kompege.ru/task?id=4794 Смотреть разбор
- https://kompege.ru/task?id=4795
- https://kompege.ru/task?id=4798
Средние
- https://kompege.ru/task?id=15337 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=70549 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=47226 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=70083 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=63038 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=59815 Смотреть разбор
- https://kompege.ru/task?id=10103 Смотреть разбор
- https://kompege.ru/task?id=17876 Смотреть разбор
- https://kompege.ru/task?id=17683 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=47226 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=60264 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=70549 Смотреть разбор
- https://inf-ege.sdamgia.ru/problem?id=48443 Смотреть разбор
Сложные
https://education.yandex.ru/ege/inf/task/233a6c0c-375f-4c5f-9ede-0bd65a1e3a0e
https://education.yandex.ru/ege/inf/task/5ca26435-f5bf-4f47-9b13-80a66952b81d
https://education.yandex.ru/ege/inf/task/747ecf32-3ab6-4836-8f69-0f4753c71025
https://education.yandex.ru/ege/inf/task/cb7351be-aa6c-4633-a330-5b2f3eafe9a6
https://education.yandex.ru/ege/inf/task/2d771902-a207-4ac6-9d51-b7b36cc8c55b
https://education.yandex.ru/ege/inf/task/addfe80b-ab14-4fb1-9002-12d8d7d537fc
https://education.yandex.ru/ege/inf/task/c1faf2ab-0ceb-416d-a848-66449ee138ba
https://education.yandex.ru/ege/inf/task/d4658b6e-671b-4165-8c34-d4607b247c2b
https://education.yandex.ru/ege/inf/task/39140acb-78c0-44b2-acff-957d5ed1f602
https://education.yandex.ru/ege/inf/task/250cf1cc-5326-4025-b07c-9f4862d5904e
https://education.yandex.ru/ege/inf/task/1b0cd2c9-047a-4644-91ce-8e1f38b23da9
https://education.yandex.ru/ege/inf/task/68027663-f416-46dd-80e9-966fe4fd36ca
https://education.yandex.ru/ege/inf/task/de5cbc88-80a2-45e4-81b1-9f229d19a3f8
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7805
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7804
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7803
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7802
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6880
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5870
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5869
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5868
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5867
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5866
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5865
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5864
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5863
https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5862
https://kompege.ru/task?id=20966
https://kompege.ru/task?id=10596
https://kompege.ru/task?id=10595
https://kompege.ru/task?id=10593
https://kompege.ru/task?id=10592
https://kompege.ru/task?id=5908
https://kompege.ru/task?id=5419
https://kompege.ru/task?id=5418
https://kompege.ru/task?id=5417
https://kompege.ru/task?id=5416
https://kompege.ru/task?id=5415
https://kompege.ru/task?id=5414
https://kompege.ru/task?id=5373
https://kompege.ru/task?id=4799
https://kompege.ru/task?id=4797
https://kompege.ru/task?id=4796
https://kompege.ru/task?id=4791
https://kompege.ru/task?id=4714


