Шешімі: Параллельное выполнение процессов
В файле содержится информация о совокупности $N$ вычислительных процессов, которые могут выполняться параллельно или последовательно. Приостановка выполнения процесса не допускается. Будем говорить, что процесс $B$ зависит от процесса $A$, если для выполнения процесса $B$ необходимы результаты выполнения процесса $A$. В этом случае процессы $A$ и $B$ могут выполняться только последовательно.
Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID), во втором столбце таблицы — время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс независимый, то в таблице указано значение 0.
Определите максимальное количество процессов, которые могут быть завершены за первые 17 мс. Считать, что каждый процесс начинается в самое раннее допустимое время. Нумерация миллисекунд начинается с 1.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.
Шешім по шагам
4 қадамДля каждого процесса по данным файла определяем все его непосредственные зависимости.
Самые ранние моменты запуска процессов вычисляем рекурсивно: независимый процесс запускается с начала отсчёта, а зависимый — после завершения всех процессов, от которых он зависит.
$$start(B)=\max_{A\in dependencies(B)} finish(A)$$Для каждого процесса вычисляем время завершения как сумму времени его запуска и длительности выполнения, затем оставляем процессы, завершившиеся не позднее 17-й миллисекунды.
$$finish(B)=start(B)+duration(B)$$Подсчёт процессов, завершившихся за первые 17 мс, даёт 12.
Где здесь ошибаются
Считать процессы зависимыми, если они просто указаны рядом в таблице.
Запускать зависимый процесс до завершения всех его предшественников.
Складывать времена всех процессов последовательно, не учитывая возможность параллельного выполнения.
Включать процесс, завершившийся после 17 мс.