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

В ком­пью­тер­ной си­сте­ме не­об­хо­ди­мо вы­пол­нить не­ко­то­рое ко­ли­че­ство вы­чис­ли­тель­ных про­цес­сов, ко­то­рые могут вы­пол­нять­ся па­рал­лель­но или по­сле­до­ва­тель­но. Для за­пус­ка не­ко­то­рых про­цес­сов не­об­хо­ди­мы дан­ные, ко­то­рые по­лу­ча­ют­ся как ре­зуль­та­ты вы­пол­не­ния од­но­го или двух дру­гих про­цес­сов  — по­став­щи­ков дан­ных. Не­за­ви­си­мые про­цес­сы (не име­ю­щие по­став­щи­ков дан­ных) можно за­пус­кать в любой мо­мент вре­ме­ни. Если про­цесс B (за­ви­си­мый про­цесс) по­лу­ча­ет дан­ные от про­цес­са A (по­став­щи­ка дан­ных), то про­цесс B может на­чать вы­пол­не­ние сразу же после за­вер­ше­ния про­цес­са A. Любые про­цес­сы, го­то­вые к вы­пол­не­нию, можно за­пус­кать па­рал­лель­но, при этом ко­ли­че­ство од­но­вре­мен­но вы­пол­ня­е­мых про­цес­сов может быть любым, дли­тель­ность про­цес­са не за­ви­сит от дру­гих па­рал­лель­но вы­пол­ня­е­мых про­цес­сов.

За­да­ние 22

В таб­ли­це пред­став­ле­ны иден­ти­фи­ка­тор (ID) каж­до­го про­цес­са, его дли­тель­ность и ID по­став­щи­ков дан­ных для за­ви­си­мых про­цес­сов.

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

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

Ре­ше­ние.

Вы­пол­ним сор­ти­ров­ку дан­ных по столб­цу С.

Надо раз­де­лить дан­ные в столб­це «ID по­став­щи­ков дан­ных» для тех про­цес­сов, где есть за­ви­си­мость от двух про­цес­сов. Для этого вы­де­лим стол­бец С, далее  — меню «Дан­ные  — Текст» по столб­цам. В меню ма­сте­ра раз­де­ле­ния тек­ста по столб­цам по­сле­до­ва­тель­но вы­бе­рем «Фор­мат дан­ных с раз­де­ли­те­ля­ми», далее «Сим­вол раз­де­ли­тель: точка с за­пя­той». Фор­мат дан­ных столб­ца «Общий».

В столб­це G будем счи­тать общее время вы­пол­не­ния про­цес­са. Для всех ячеек, у ко­то­рых ячей­ка в столб­це С равна нулю, это зна­че­ние будет равно зна­че­нию в ячей­ке столб­ца В. За­пи­шем в ячей­ку G2 фор­му­лу =B2 и ско­пи­ру­ем её на диа­па­зон G2:G40.

По­лу­ча­ем таб­ли­цу:

 

ABCDEFG
1ID про­цес­саВремя вы­пол­не­ния

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

ID по­став­щи­ков

дан­ных

21002618018
310123404
41021892092
51025110010
61037441041
71042344044
81059413013
91062959059
101104072072
111112519019
1211324707
131159342042
141168019019
151177793093
161234417017
1712607707
181269081081
191285828028
201293183083
211301575075

 

В ячей­ку E41 за­пи­шем фор­му­лу =ВПР(C41;A:G;7;0) и ско­пи­ру­ем ее на диа­па­зон E41:E99. Дан­ная фор­му­ла вы­ве­дет время про­цес­са, от ко­то­ро­го за­ви­сит те­ку­щий. В ячей­ку G41 за­пи­шем фор­му­лу =E41+B41, чтобы по­счи­тать общее время вы­пол­не­ния про­цес­са. Ско­пи­ру­ем фор­му­лу на диа­па­зон G41:G68.

По­лу­ча­ем таб­ли­цу:

 

391503085085
401505827027
41111778100261826
42116123100261821
43108242510123429
44104952102189294
45115025103744146
4613421611037441102
4713391811042344125
4814490791042344123
491099423105941336
5010707551062959114
5111742421062959101
52107463510707114149
53108563310707114147
5410980911082429120
55112292310856147170
561210750111772676
57137209411422094
581237133115024679

 

В ячей­ку F78 за­пи­шем фор­му­лу =ВПР(D69;A:G;7;0) и ско­пи­ру­ем ее на диа­па­зон F78:F99. Дан­ная фор­му­ла вы­ве­дет время вто­ро­го про­цес­са, от ко­то­ро­го за­ви­сит те­ку­щий. В ячей­ку G69 за­пи­шем фор­му­лу =МАКС(E69:F69)+B69, чтобы по­счи­тать общее время вы­пол­не­ния про­цес­са. Ско­пи­ру­ем фор­му­лу на диа­па­зон G78:G99.

По­лу­ча­ем таб­ли­цу:

 

148338013877191271
14685511455277128
1020841100261012318459
102857010026102181892162
127832810123125214186214
1184241102081098059120161
14552311025111502104677
1365875102511278310214289
1095440103741085641147187
1124510010594110401372172
131599710629115935942156
1193048107071085611429162
1229944107071104011472158
1238010108561161214721157
1507820108561496414782167
11422671095411229187170254
1246032109801237112079152
1252125109941184236161186
12024991122911245170172271
135209911324123807157256
13440291142211971254122283
119717611502115934642122
13340201193012024162271291
1220194120241210727176365

 

Окон­ча­тель­но, вос­поль­зо­вав­шись фор­му­лой =СЧЁТЕСЛИ(G:G;"<=170"), по­лу­чим ответ  — 72.

 

Ответ: 72.

 

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

f = list(map(lambda x: list(map(int, x.replace(';',' ').split())), open('22 (1).txt').readlines()))

sl = {x[0]: x[1:] for x in f}

y = lambda x: sl[x][0] + max(y(i) for i in sl[x][1:]) if sl[x][-1] else sl[x][0]

print(len([1 for i in sl if y(i) <= 170]))

 

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

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


Аналоги к заданию № 51991: 52193 81806 Все