В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что
Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID), во втором столбце таблицы — время его выполнения в миллисекундах, в третьем столбце перечислены
Типовой пример организации данных в файле:
| ID процесса B | Время выполнения процесса B (мс) | ID процесса(ов) A |
|---|---|---|
| 1 | 4 | 0 |
| 2 | 3 | 0 |
| 3 | 1 | 1; 2 |
| 4 | 7 | 3 |
Определите минимальное время, через которое завершится выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно.
Выполните задания, используя данные из файла ниже:
| F | G |
|---|---|
| Время, мс | ID процесса |
| 1 | |
| 2 | |
| 3 | 2 |
| 4 | 1 |
| 5 | 3 |
| 6 | |
| 7 | 9 |
| 8 | 10 |
| 9 | |
| 10 | |
| 11 | 5 |
| 12 | 4 |
| 13 | 11 |
| 14 | 6, 12 |
| 15 | 7 |
| 16 | |
| 17 | 8 |
Используя данные из файла, составим таблицу, на какой мс может закончится каждый из процессов. Процессы с ID «1», «2», «9» и «10» независимые, поэтому их выполнение закончится
Таким образом, вся совокупность процессов завершится на 17 мс.
Ответ: 17.
Приведём другое решение на языке Python.
import sys
d = {'0': 0}
for elem in sys.stdin:
num, dur, *subs = elem.replace(';', ' ').split()
d[num] = max([d[i] for i in subs]) + int(dur)
print(max(d.values()))
Запустив программу вводим данные из таблицы построчно, цифры в строках разделяем пробелом. Закончив ввод всех строк таблицы необходимо нажать CTRL + D.
Примечание.
Заметим, что данный способ работает для любой таблицы, но уместен только для таблиц с небольшим количеством строк (процессов).
Приведём другое решение Никитиной Елизаветы на языке Python.
f = open("22.txt").read().split("\n")
m = {}
for i in f:
s = i.split()
if s[2] == '0':
m[s[0]] = int(s[1])
else:
w = s[2].split(";")
sp = []
for j in w:
j = j.replace(" ", "")
sp.append(int(m[j]))
m[s[0]] = int(s[1]) + max(sp)
print(max(m.values()))
Примечание.
Данные из таблицы необходимо сохранить в текстовый документ.

