Решение задания № 22 без сдвигов процессов в электронных таблицах

Автор статьи: Андрей Рогов

Введение

Задание № 22 в его нынешнем виде появилось в 2023 году. За прошедшие три года формулировка задания несколько раз менялась, причём довольно сильно. В качестве исходных данных представлена таблица, описывающая процессы. Для каждого процесса известен его номер, время выполнения и от каких процессов он зависит.

img

Один из популярных методов решения таких заданий — построение диаграммы Ганта. Диаграмма Ганта — это горизонтальный столбчатый график. Его часто используют в менеджменте проектов, чтобы проиллюстрировать относительное время выполнения разных этапов и задач.

Для решения 22-го задания такие диаграммы можно строить как в черновике на бумаге, так и с помощью компьютера. Наиболее удобный способ решения — с помощью электронных таблиц. Во многих редакторах электронных таблиц есть примеры построения таких диаграмм. На рисунке ниже изображён шаблон диаграммы Ганта в LibreOffice Calc.

img

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

Построим диаграмму Ганта для приведённой таблицы. Сократим ширину столбцов правее исходных данных и расположим там временну́ю шкалу. Выделим цветом ячейки независимых процессов (т. е. 101 и 102), по одной ячейке на 1 миллисекунду.

img

Процесс 103 зависит от процессов 101 и 102, следовательно он может начаться только после завершения последнего из них. Так, процесс 103 начнётся с 5-й мс. А процесс процесса 104 зависит от 103-го, который к текущему моменту не завершился. Поэтому сначала изображаем 103-й процесс и только потом 104-й. Нельзя начинать процесс, пока не закончились все процессы, от которых он зависит.

Итоговая диаграмма представлена на картинке.

img

Задача 1. Минимальное время всей совокупности процессов

Ссылка на задачу

img

Уменьшим ширину столбцов, сделаем временну́ю шкалу и заполним ячейки независимых процессов.

img

Далее, соблюдая порядок процессов, изобразим все оставшиеся.

Несколько полезных советов при заполнении:

  • удобно выделять цветом сразу все ячейки одного процесса. Для этого их необходимо выделить, например удерживая Shift и нажимая стрелку вправо. При этом в нижней части окна указывается, сколько ячеек выделено
  • для наглядности можно выделять целиком строки процессов, от которых зависит текущий, — так удобнее искать его возможное время начала
  • для вертикальной прокрутки окна таблицы используется Shift + колёсико мыши
  • для изменения масштаба используется Ctrl + колёсико мыши

Полученная диаграмма представлена на рисунке.

img

По ней видно, что последним завершился процесс с ID 15 — через 51 мс.

Решение задачи № 1

Задача 2. Минимальное время завершения всех процессов с большой длительностью

Ссылка на задачу

img

Обратим внимание на исходные данные.

img

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

Альтернативный вариант решения — построить диаграмму вручную, указывая продолжительность цепочки процессов в виде числа. Чтобы вычислить время окончания процесса, необходимо взять время окончания всех процессов, от которых зависит текущий, и из них выбрать максимальное. К нему прибавляем время выполнения текущего процесса.

Например, чтобы вычислить время процесса 6, возьмём максимальное время из процессов 4, 5, 7 и 8. Это время завершения 8-го процесса — 67 мс. Когда так выстроятся все процессы, максимальное время и будет ответом. Продемонстрируем в виде рисунка.

img

В таком решении придётся многое делать вручную, что часто приводит к ошибкам в вычислениях. Попробуем формализовать основные шаги решения.

  1. Вычисляем время завершения процесса
  • если этот процесс независимый, берём его время
  • если процесс зависит от других и их время завершения известно, то берём максимальное время и прибавляем время текущего процесса
  1. Если необходимо, для каждого процесса вычисляем время его начала

Последний пункт необходим для некоторых формулировок заданий.

Все эти пункты тоже можно реализовать в электронных таблицах, без вычислений вручную. Продемонстрируем решение в программе LibreOffice Calc. В других программах для работы с таблицами решение аналогичное.

На первом шаге разобьём столбец C на несколько, так, чтобы каждое число было в отдельной ячейке. Для этого используем команду «Данные» → «Текст по столбцам» и укажем в качестве разделителя «;».

img

Теперь оформим заготовку для остальных ячеек. Размечать таблицу разными цветами не обязательно, но это позволяет лучше ориентироваться в данных.

img

Столбцы C, D, E и F содержат исходные данные, разделённые по столбцам. В столбцах G, H, I и J будет записано время завершения процессов из столбцов С — F. Так мы узнаем время завершения всех процессов, от которых зависит текущий процесс. Зная эту информацию, мы сможем вычислить время завершения текущего процесса. Его занесём в столбец L. А столбец K необходим, если вопрос задачи требует знать время начала процесса.

Начнём с заполнения столбцов G — J. Зная ID процесса, будем вносить время его окончания с помощью функции ВПР. Поскольку нам предстоит копировать формулу на весь диапазон ячеек, область поиска необходимо зафиксировать с помощью абсолютной адресации. Некоторые процессы зависят от процесса с ID 0, т. е. являются независимыми.

У функции ВПР в LibreOffice Calc есть одна особенность. Если искомое значение — пустая ячейка, то функция выдаёт #Н/Д, то есть «неопределённые данные». Чтобы избежать этой ошибки, можно заполнить все пустые ячейки с ID процессов А нулями или использовать функцию ЕСНД. Она позволяет указать, какое значение заносить в ячейку, если получен результат #Н/Д.

Используем второй вариант. Итоговая формула в ячейке G2:

G2=ЕСНД(ВПР(C2;$A$2:$L$19;12;0);0)

Скопируем формулу на весь диапазон ячеек G1 — J18. На этом этапе решения значениями ячеек будут нули, поскольку мы ещё не внесли формулу для времени окончания процесса. В ячейках, содержащих время ненулевых ID, будут пустые значения.

В ячейку L2 внесём формулу вычисления времени окончания процесса: максимальное время завершения процессов, от которых зависит текущий, плюс время этого процесса.

L2=МАКС(G2:J2)+B2

Время начала процесса заполним как время окончания минус время выполнения процесса. Для удобства к разности прибавим единицу. Тогда время начала и окончания будет содержать миллисекунды, в которые процесс шёл, т. е. время будет указано включительно.

K2=L2-B2+1

Итоговая таблица представлена на рисунке.

img

Чтобы определить время завершения всех процессов, возьмём максимальное время из столбца L. Его тоже лучше не искать глазами, а использовать функцию МАКС или выделить весь столбец и посмотреть на значение в строке состояния.

Решение задачи № 2

Задача 3. Максимальное количество процессов за определённое время

Ссылка на задачу

img

В исходных данных содержится 25 процессов. Хотя время выполнения каждого процесса небольшое, всего процессов довольно много, поэтому рисовать диаграмму вручную будет долго. Решим задание с помощью функции ВПР, как в предыдущем.

img

Чтобы ответить на вопрос, сколько процессов завершилось за первые 17 мс, необходимо посчитать, у скольких процессов время окончания меньше или равно 17. Таких процессов 12. Можно посчитать вручную, а можно использовать фильтр или формулу:

=СЧЁТЕСЛИ(H2:H26;"<=17")

Схожим образом можно решить задачу с вопросом «Определите минимальное время (в мс), за которое завершится n процессов». Сортируем данные по времени окончания и находим время окончания n-го процесса.

Решение задачи № 3

Задача 4. Максимальное количество процессов на определённой миллисекунде

Ссылка на задачу

img

Теперь нужно найти и время начала процессов. Построим таблицу.

img

Чтобы определить, что процесс выполняется на 15-й мс, число 15 должно быть между временем его начала и конца (включая границы). В этом примере нам подойдут ячейки, выделенные на скриншоте жёлтым:

img

Также время начала понадобится, чтобы ответить на вопросы вида «Определите максимальное количество процессов, которые могут начаться не ранее чем с 8-й мс от начала отсчёта».

Решение задачи № 4

Заключение

В статье рассмотрены различные подходы к решению задания № 22 ЕГЭ по информатике без использования сдвигов процессов, с применением электронных таблиц. Преимущества предложенного подхода:

  • наглядность представления данных
  • возможность автоматизации вычислений
  • удобство анализа временных интервалов
  • гибкость при изменении условий задачи

Освоение этих методов позволит эффективно решать задание № 22, даже если появятся новые вариации условий. Полученные навыки также можно применять при решении других задач, связанных с анализом временных зависимостей.

Рекомендуем решить подборку задач для практики.

Источник: Яндекс Учебник — Решение задания № 22 без сдвигов процессов в электронных таблицах. Каталог разборов: education.yandex.ru.

Назад к статьям Поделиться