Многопоточные вычисления: максимальное число одновременных процессов
Задание 22 · Билет 2 · ЕГЭ по информатике
Условие
В файле содержится информация о 800 процессах. Для каждого процесса в отдельной строке записаны два натуральных числа: время начала и время окончания. Процесс выполняется начиная с момента начала включительно и до момента окончания не включая его. Процессы выполняются параллельно.
Скачивать не обязательно: если решаете на сайте, данные уже есть в программе. Скачайте, только чтобы посмотреть файл отдельно на компьютере.
Попробуйте программой
Необязательно, но удобно: напишите здесь свой код на Python, который найдёт ответ. Если не получится — откройте решение и вставьте готовую программу одной кнопкой.
Решите программой на Python
в браузереНапишите свой код, который найдёт ответ, и нажмите «Выполнить». Горячая клавиша запуска: Ctrl/⌘ + Enter.
Файл задачи уже в песочнице: task22-2-processy.txt — читайте через open('task22-2-processy.txt').
Потренируйся на процессах: тренажёр соберёт новый набор интервалов и попросит найти максимум одновременно выполнявшихся процессов.
Решение
Решение
открыто шагов: 5 из 5Способ 1 · перебор по моментам времени
data = [tuple(map(int, line.split())) for line in open('task22-2-processy.txt')] # пары (начало, окончание)
lo = min(s for s, e in data) # самое раннее начало
hi = max(e for s, e in data) # самое позднее окончание
best = 0
for t in range(lo, hi + 1): # идём по времени по единице
cur = 0
for s, e in data: # сколько процессов охватывают момент t
if s <= t < e: # начало включительно, окончание — нет
cur += 1
best = max(best, cur)
print(best) # максимальное число одновременных процессов Способ 2 · метод событий
data = [tuple(map(int, line.split())) for line in open('task22-2-processy.txt')] # пары (начало, окончание)
events = [] # события: (время, изменение)
for s, e in data:
events.append((s, 1)) # в момент начала процессов на 1 больше
events.append((e, -1)) # в момент окончания — на 1 меньше
events.sort() # при равном времени окончание (−1) раньше начала (+1)
cur = 0 # сколько процессов выполняется сейчас
best = 0 # максимум за всё время
for t, d in events:
cur += d
best = max(best, cur)
print(best) # максимальное число одновременных процессов Теория и другие билеты
Разбор с нуля, типовые ошибки, частые вопросы и все билеты задания 22 — на странице задания.