ex exxam.ruВсе задания
практикапошаговые заданияобработка файлабез регистрации

Практикум: строим события

Разберём метод событий изнутри: в цикле по процессам создадим события (начало +1, окончание −1), отсортируем их и пройдём со счётчиком — его максимум и есть ответ.

События

Каждый процесс даёт два события: (начало, +1) и (окончание, −1). Сложив изменения по времени, получаем число активных процессов в каждый момент.

Сортировка и счётчик

События сортируют по времени; при равном времени окончание (−1) идёт раньше начала (+1). Идя по событиям со счётчиком cur, запоминают максимум — это и есть ответ.

Как пользоваться этим режимом. Сначала посмотрите интерактивный разбор — как из процессов получаются события. Затем выполните шаги с кодом: создайте события, отсортируйте и найдите максимум.

Мини-разбор: как из процессов получаются события

Слева — файл процессов, справа — список событий, который строит программа. Идите по шагам: сначала события создаются в цикле по процессам, затем сортируются, и счётчик проходит по ним по возрастанию времени. Активный шаг подсвечивает нужное.

1Создаём события

Каждый процесс даёт два события: начало (время, +1) и окончание (время, −1). Создадим их в цикле — по одному процессу за шаг.

2Процесс 1: [1, 5)

Добавляем два события: (1, +1) — начало и (5, −1) — окончание.

3Процесс 2: [2, 4)

Добавляем два события: (2, +1) — начало и (4, −1) — окончание.

4Процесс 3: [3, 6)

Добавляем два события: (3, +1) — начало и (6, −1) — окончание.

5Процесс 4: [5, 7)

Добавляем два события: (5, +1) — начало и (7, −1) — окончание.

6Процесс 5: [6, 8)

Добавляем два события: (6, +1) — начало и (8, −1) — окончание.

7Сортируем события

Теперь упорядочим события по времени. При равном времени окончание (−1) идёт раньше начала (+1) — тогда касающиеся интервалы не считаются одновременными.

8Событие 1: (1, +1)

Применяем событие к счётчику и запоминаем максимум.

9Событие 2: (2, +1)

Применяем событие к счётчику и запоминаем максимум.

10Событие 3: (3, +1)

Применяем событие к счётчику и запоминаем максимум.

11Событие 4: (4, −1)

Применяем событие к счётчику и запоминаем максимум.

12Событие 5: (5, −1)

Применяем событие к счётчику и запоминаем максимум.

13Событие 6: (5, +1)

Применяем событие к счётчику и запоминаем максимум.

14Событие 7: (6, −1)

Применяем событие к счётчику и запоминаем максимум.

15Событие 8: (6, +1)

Применяем событие к счётчику и запоминаем максимум.

16Событие 9: (7, −1)

Применяем событие к счётчику и запоминаем максимум.

17Событие 10: (8, −1)

Применяем событие к счётчику и запоминаем максимум.

18Готово

Все события обработаны. Наибольшее значение счётчика — 3; это и есть ответ.

событий создано: 0
Файл · processy.txt (начало окончание)
1 1 5
2 2 4
3 3 6
4 5 7
5 6 8

Каждая строка — процесс: время начала и время окончания.

События (создаются в цикле)

Для каждого процесса добавляем два события: начало (+1) и окончание (−1).

Загрузка практикума…

Частые вопросы

Зачем превращать процессы в события?
Так не нужно проверять каждый момент времени: достаточно пройти один раз по отсортированным событиям и найти максимум счётчика — это быстрее.
Почему окончание идёт раньше начала при равном времени?
Процесс, завершившийся в момент t, уже не работает, а начавшийся в t — работает. Поэтому при равном времени сначала обрабатывается окончание (−1).
Какой из способов выбрать на экзамене?
Оба дают один ответ. Перебор по моментам нагляднее, а метод событий быстрее на больших файлах.

Разбор задания 22Все задания