Задания
Версия для печати и копирования в MS Word
Тип 22 № 47592
i

В файле со­дер­жит­ся ин­фор­ма­ция о со­во­куп­но­сти N вы­чис­ли­тель­ных про­цес­сов, ко­то­рые могут вы­пол­нять­ся па­рал­лель­но или по­сле­до­ва­тель­но. Будем го­во­рить, что про­цесс B за­ви­сит от про­цес­са A, если для вы­пол­не­ния про­цес­са B не­об­хо­ди­мы ре­зуль­та­ты вы­пол­не­ния про­цес­са A. В этом слу­чае про­цес­сы могут вы­пол­нять­ся толь­ко по­сле­до­ва­тель­но.

Ин­фор­ма­ция о про­цес­сах пред­став­ле­на в файле в виде таб­ли­цы. В пер­вой стро­ке таб­ли­цы ука­зан иден­ти­фи­ка­тор про­цес­са (ID), во вто­рой стро­ке таб­ли­цы  — время его вы­пол­не­ния в мил­ли­се­кун­дах, в тре­тьей стро­ке пе­ре­чис­ле­ны с раз­де­ли­те­лем «;» ID про­цес­сов, от ко­то­рых за­ви­сит дан­ный про­цесс. Если про­цесс яв­ля­ет­ся не­за­ви­си­мым, то в таб­ли­це ука­за­но зна­че­ние 0.

Опре­де­ли­те ми­ни­маль­ное время, через ко­то­рое за­вер­шит­ся вы­пол­не­ние всей со­во­куп­но­сти про­цес­сов, при усло­вии, что все не­за­ви­си­мые друг от друга про­цес­сы могут вы­пол­нять­ся па­рал­лель­но.

Ти­по­вой при­мер ор­га­ни­за­ции дан­ных в файле:

ID про­цес­са BВремя вы­пол­не­ния про­цес­са B (мс)ID про­цес­са(ов) A
1

40
230
311;2
473

 

В дан­ном слу­чае не­за­ви­си­мые про­цес­сы 1 и 2 могут вы­пол­нять­ся па­рал­лель­но, при этом про­цесс 1 за­вер­шит­ся через 4 мс, а про­цесс 2  — через 3 мс с мо­мен­та стар­та. Про­цесс 3 может на­чать­ся толь­ко после за­вер­ше­ния обоих про­цес­сов 1 и 2, то есть через 4 мс после стар­та. Он длит­ся 1 мс и за­кон­чит­ся через 4 + 1  =  5 мс после стар­та. Вы­пол­не­ние про­цес­са 4 может на­чать­ся толь­ко после за­вер­ше­ния про­цес­са 3, то есть через 5 мс. Он длит­ся 7 мс, так что ми­ни­маль­ное время за­вер­ше­ния всех про­цес­сов равно 5 + 7  =  12 мс.

Вы­пол­ни­те за­да­ния, ис­поль­зуя дан­ные из файла ниже:

За­да­ние 22

Спрятать решение

Ре­ше­ние.

От­сор­ти­ру­ем дан­ные в таб­ли­це так, чтобы все не­за­ви­си­мые про­цес­сы ока­за­лись в на­ча­ле таб­ли­цы и любой про­цесс был рас­по­ло­жен после всех про­цес­сов, от ко­то­рых он за­ви­сит. Также в таб­ли­цу до­ба­вим стол­бец «Время окон­ча­ния про­цес­са» и за­пи­шем туда дли­тель­но­сти не­за­ви­си­мых про­цес­сов.

 

ABCD
ID про­цес­са BВремя

вы­пол­не­ния

про­цес­са B (мс)

ID про­цес­са(ов) A
1404
2505
3202
4505
574
623
735
814;5
9404
1053
1116;7
1273;8
1332;4
1421;2
1549;11

 

Далее рас­счи­та­ем время вы­пол­не­ния остав­ших­ся про­цес­сов:

f(5)  =  7 + f(4)  =  7 + 5  =  12;

f(6)  =  2 + f(3)  =  2 + 2  =  4;

f(7)  =  3 + f(5)  =  3 + 12  =  15;

f(8)  =  1 + max(f(4), f(5))  =  1 + 12  =  13;

f(10)  =  5 + f(3)  =  5 + 2  =  7;

f(11)  =  1 + max(f(6), f(7))  =  1 + 15  =  16;

f(12)  =  7 + max(f(3), f(8))  =  7 + 13  =  20;

f(13)  =  3 + max(f(2), f(4))  =  3 + 5  =  8;

f(14)  =  2 + max(f(1), f(2))  =  2 + 5  =  7;

f(15)  =  4 + max(f(9), f(11))  =  4 + 16  =  20.

 

ABCD
ID про­цес­са BВремя

вы­пол­не­ния

про­цес­са B (мс)

ID про­цес­са(ов) A
1404
2505
3202
4505
57412
6234
73515
814;513
9404
10537
1116;716
1273;820
1332;48
1421;27
1549;1120

 

Ответ: 20.

 

При­ведём ре­ше­ние на языке Python.

def f(d):

if d[2] == [0]:

return d[1]

else:

maxx = 0

for i in d[2]:

if maxx < f(index[i - 1]):

maxx = f(index[i - 1])

return maxx + d[1]

 

from csv import reader

with open("22_11.csv") as F:

s = reader(F, delimiter=';', quotechar='"')

next(s)

index = []

for i in s:

index.append([int(i[0]), int(i[1]), list(map(int, str(i[2]).split(';')))])

for i in range(len(index)):

print(i + 1, f(index[i]))

 

При­ме­ча­ние.

Для счи­ты­ва­ния ин­фор­ма­ции из файла не­об­хо­ди­мо кон­вер­ти­ро­вать его из xlsx в csv.

 

При­ведём ре­ше­ние Вла­ди­ми­ра Ар­та­мо­но­ва на языке Python.

with open('22.txt') as file:

processes = {"0": 0}

 

for line in file.readlines():

num, time, related = line.split()

processes[num] = max([processes[i] for i in related.split(";")]) + int(time)

 

print(max(processes.values()))

 

При­ме­ча­ние.

Для счи­ты­ва­ния ин­фор­ма­ции из файла не­об­хо­ди­мо кон­вер­ти­ро­вать его из xlsx в txt.

Илья Пащук 14.10.2022 20:22

Это ре­ше­ние, ко­то­рое на Python и ис­поль­зу­ет openpyxl, не со­всем кор­рект­но в том смыс­ле, что на ЕГЭ до­сту­па к openpyxl может и не ока­зать­ся. А вот экс­порт в csv будет до­сту­пен все­гда, так что лучше ре­шать с ним, хоть так и длин­нее.

Служба поддержки

Дель­ное за­ме­ча­ние, по­ме­ня­ли. Спа­си­бо!