Скачиваний:
42
Добавлен:
30.05.2020
Размер:
689.54 Кб
Скачать

Звернімо увагу на таке: поки що заповнений лише перший стовпець, а решта вільні, хоча на першому етапі ми виконува­ ли дії за умови нібито визначеної стратегії щодо інших пред­ метів.

і

Рі

 

Р

2

 

Р

3

 

Р*

 

;=9

и>*

щ

i-w2

Щ-w*

Сума

 

 

 

 

ваги

' і

у ,

h

 

V,,

ч

 

ty

А_

U 4

 

 

 

 

 

 

 

і

7

11

2

0

11

0

0

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

о

0

0

9

24

24

1

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

0

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

3

0

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

4

0

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

5

0

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

6

0

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

7

0

0

1

 

11

 

 

 

 

 

 

 

 

 

 

 

 

8

0

0

1

 

11

 

 

 

 

 

 

 

 

 

 

 

 

9

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

10 ,

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

11

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

12

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

13

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

14

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

15

1

24

0

 

24

 

 

 

 

 

 

 

 

 

 

 

 

Мал. 130

Зробимо крок назад і перейдемо до третього етапу, на якому розглянемо предмет р2. Оскільки вага другого предмета менша за вагу першого і можливість його покласти в рюкзак наступить раніше, ніж це сталося для першого предмета, то в другому стовпці до і = 7 усі значення, що стосуються другого предмета, встановлюються 0. Далі до значення і = 8, тобто до значення і, що відповідає вазі першого предмета, можна сміливо брати другий предмет (t2 = 1), враховуючи його вартість (і>2 = 11) (мал. 130, а).

Починаючи з і = 9, стратегія змінюється, тому варто її роз­ глянути (мал. 130, б). Маємо таку ситуацію: резерв ваги в рюк­ заку становить 9 одиниць, другий предмет важить 7 одиниць і коштує 11 одиниць. Якщо ми його візьмемо, то від резерву залишиться 2 одиниці, а при такому резерві взяти перший предмет неможливо (інформація попереднього стовпця в 2-му рядку). Таким чином, якщо ми візьмемо другий предмет, то сумарна вартість буде дорівнювати 11 одиниць (див. 1-й рядок табл., мал. 130, б). Ми можемо другий предмет не брати і при цьому не враховувати його вартість. Тоді резерв у розмірі 9 одиниць залишиться незмінним. Саме тому розглянемо 9-й

222

рядок попереднього стовпця і звідти візьмемо інформацію, що вартість покладеного у рюкзак становитиме 24 одиниці. Сумар­ на вартість буде 24 одиниці (див. 2-й рядок табл., мал. 130, б). Зрозуміло, що другий варіант кращий, і він заноситься у 9-й рядок 2-го стовпця таблиці (мал. 130, а). Оскільки сумарна вага першого і другого предметів (9 + 7 = 16) перевищує допус­ тиму вагу рюкзака 15, то всі решта рядків 2-го стовпця будуть такими самими, як і 9-й рядок.

На другому етапі розглядаємо предмет р3 і працюємо з 3-м стовпцем таблиці (мал. 131, а). Аналогічно до попереднього етапу заповнимо нулями елементи стовпця до і = 4, оскільки саме стільки важить третій предмет.

Починаючи зі = 4доі = 6, ми можемо взяти лише третій пред­ мет вагою 4, тому вибір невеликий і однозначний: t3 = 1, v3 = 10 (мал. 131, а).

Починаючи з і = 7, можна робити вибір між другим і третім предметами. Виявляється, що, взявши третій предмет, мати­ мемо сумарну вартість лише 10 одиниць, оскільки в рюкзаку залишається резерв ваги 3 одиниці і це не дає можливості ще взяти додатково жодного з предметів рх, р2, р3. Якщо відмови­ тися від предмета^, то резерв ваги 7 одиниць дає можливість взяти другий предмет і одержати сумарну вартість 11 одиниць

і

А

 

 

А

А

 

А

 

щ

ч

щ

h

v*

А_

V4

 

 

0

0

 

0

0

 

0

0

 

0

 

 

1

0

 

0

0

 

0

0

 

0

 

 

2

0

 

0

0

 

0

0

 

0

 

 

3

0

 

0

0

 

0

0

 

0

 

 

4

0

 

0

0

 

0

1

 

10

 

 

5

0

 

0

0

 

0

1

 

10

 

 

6

0

 

0

0

 

0

1

 

10

 

 

7

0

 

0

1

 

11

0

 

11

 

 

8

0

 

0

1

 

11

0

 

11

 

 

9

1

 

24

0

 

24

0

 

11

 

 

10

1

 

24

0

 

24

0

 

11

 

 

11

1

 

24

0

 

24

0

 

24

 

 

12

1

 

24

0

 

24

0

 

24

 

 

13

1

 

24

0

 

24

1

 

34

 

 

14

1

 

24

0

 

24

1

 

34

 

 

15

1

 

24

0

 

24

1

 

34

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а)

І=1

и>.

vs

i-w3

 

Vi-w3

Сума

 

ваги

 

 

 

 

 

 

1

і 4

;10

з 1 о ! ю

0 1 0 [ 0 1 7 | 11 | 11

б)

 

 

 

 

 

 

 

 

 

 

 

 

 

і=11

и>»

щ

і-и>3

 

 

Сума

 

i-w3

ваги

1

4

10!

7

 

11

21

 

 

 

11

 

24

24

0

0

0 і

 

 

 

 

 

 

 

 

в)

 

 

 

 

 

 

 

 

 

 

 

 

 

і=13

«>з

v3

i-w3

 

Vi-Wa

Сума

 

ваги

1

4

10

11

 

24

34

0

0

0

13

 

24

24

 

 

 

 

 

 

 

г)

Мал. 131

223

(мал. 131, б). Саме тому в обчислювальній таблиці (мал. 131, а) від і т 7 до і = 10 маємо такі значення: t3 = 0, и3 = 11.

Наступна критична ситуація, коли і = 11: у цьому разі мож­ на спробувати взяти або другий і третій предмети разом, або один перший предмет. Розрахунок такого вибору представле­ ний на малюнку 131, в. Як бачимо, краще не брати третій пред­ мет і мати виграш у 24 одиниці вартості: t3 = 0, v3 = 24.

Така ситуація зберігається до і = 13, оскільки в такому разі можна спробувати взяти перший і третій предмети. Знову звер­ немося до розрахунку (мал. 131, г): краще взяти третій предмет, маючи при цьому вартість 10, і врахувати стан 11-го рядка у по­ передньому стовпці, де v2 = 24. Таким чином, сумарний резуль­ тат вартості покладеного в рюкзак становитиме 34 одиниці.

Крокуючи назад від останнього етапу, ми дійшли до першо­ го етапу, який передбачає розгляд предмета р4 . Оскільки на кожному етапі /' досліджуються всі можливі варіанти залишку ваги в рюкзаку з розрахунку, що попереду ще (п - j) етапів, то на даному етапі ніякого залишку вже немає (мал. 132, а). Тому для предмета р4 розглянемо лише дві можливі ситуації при вазі 15 одиниць і визначимося, що краще: брати чи не брати цей предмет. На малюнку 132, б представлено зроблені розра­ хунки, з яких видно, що краще цей предмет взяти і сумарно

і

 

Рі

 

Р2

Р»

 

Рл

и ,

J^

vz

ч

Ч

А_

V4

 

0

0

 

0

0

 

0

гт

0

 

 

 

1

0

 

0

0

 

0

0

0

 

 

 

2

0

 

0

0

 

0

0

0

 

 

 

3

0

 

0

0

 

0

0

0

 

 

 

4

0

 

0

0

 

0

і

10

 

 

 

5

0

 

0

0

 

0

і

10

 

 

 

6

0

 

0

0

 

0

Ju

10

 

 

 

7

0

 

0

1

 

11

0

10

 

 

 

8

0

 

0

1

 

11

0

10

 

 

 

9

1

 

24

0

 

24

0

10

 

 

 

10

1

 

24

0

 

24

0

10

 

 

 

11

1

 

24

0

 

24

0

24

 

 

 

12

1

 

24

0

 

24

0

24

 

 

 

13

1

 

24

0

 

24

1

34

 

 

 

14

1

 

24

0

 

24

1

34

 

 

 

15

1

 

24

0

 

24

1

34

1

 

41

а)

і=15

 

 

i-w4

Vi-Wi

Сума

">4

»4

ваги

1

2

7

13

34

41

0

0

0

15

34

34_\

 

 

 

 

 

 

Мал. 132

224

отримати виграш у 41 одиницю (вартість усього, що покладе­ но до рюкзака).

Залишилося отримати другу відповідь поставленої перед нами задачі: а які саме предмети треба для цього взяти? Відповідь, як завжди, є у самій таблиці (мал. 132, а). Почнемо

знижнього першого справа елемента таблиці. Значення v4 = 41 дає нам максимальну вартість складених до рюкзака предме­ тів, a t^ = 1 означає, що останній, четвертий предмет треба взяти. Його вага становить 2 одиниці, тому в рюкзаку зали­ шається резерв ваги 13 одиниць. Переходимо до попереднього

стовпця у його 13-й рядок і бачимо, що ts = 1, тобто і цей пред­ мет беремо. З урахуванням ваги третього предмета 4 одиниці в рюкзаку залишається 9 одиниць резервної ваги. В 9-му ряд­

ку 2-го стовпця міститься інформація t2 = 0, а це означає, що другий предмет до рюкзака не кладеться і його резервна вага залишається 9 одиниць. Останній крок: в 9-му рядку 1-го стовп­

ця tx = 1. Весь описаний шлях отримання переліку предметів, які кладуться до рюкзака і дають максимальний виграш у вар­ тості цих предметів, визначений у таблиці на малюнку 132, а півжирним курсивом.

Якщо перевірити отриману відповідь, проаналізувавши вхідну інформацію (мал. 128), то можна зробити висновок: су­

марна вага предметів pv р3, р4 дорівнює 15 і дає максимальну сумарну вартість - 41 одиницю.

Завершимо розгляд алгоритму розв'язання задачі про рюкзак, зазначивши, що і для неї розташування предметів не впливає на ефективність розв'язування задачі: при кожному

зтаких варіантів буде визначено однаковий оптимальний результат сумарної ваги предметів, однак набір вибраних пред­ метів може виявитися різним. Це говорить про неоднознач­ ність розв'язку даної задачі, як і більшості задач динамічного програмування.

Запропонуємо фрагмент основної частини алгоритму, реалі­ зованої у вигляді тексту програми мовою Pascal з відповідними коментарями. Познайомимося спершу з призначенням змін­ них, використаних у цьому фрагменті. Масиви weight і value містять інформацію про вагу і вартість п досліджуваних пред­ метів. Двовимірний масив ЄЛ організований як масив елементів типу record з полями take і val. У цьому масиві відбувається обчислення значень таблиці, що дасть відповідь на поставлене в задачі запитання. А саме поле take призначене для поетапно­ го зберігання інформації про те, брати (1) чи ні (0) поточний предмет, а поле val - для інформації про поточну максимальну вартість розглянутих предметів.

Перед початком виконання самого алгоритму варто всім еле­ ментам масиву си надати значення 0:

8 Інформатика, 9-10 кл.

225

for і := 0 to k do for j := 1 to n do

begin

|c[i, j].take := 0; c[i, j].val := 0 e n d ;

Після цього можна приступити до розрахунку елементів ма­ сиву ctj:

for І := weight[1] to k do {Визначення оптимальної інформації для предмета р,:} begin

| с[і, 1].take := 1; с[і, 1].val := value[1] {r, = i,v, = value,.} end;

 

{Обчислення значень елементів масиву cjp}

for j := 2 to n do

{починаючи з предмета p2}

for і := weight[j] to k do

{та з номера рядка, що відповідає вазі предмета р2.}

 

{Визначення оптимального}

if value[j] + с[і weight[j], j - 1].val > c[i, j - 1].val

{варіанта}

then begin

 

{поточного етапу.}

c[i, j].take := 1;

c[i, jj.val := value[j] + c[i weight[j], j - 1].val end

else begin

c[i, j].take :=0;

c[i, jj.val :=c[i,j - 1].val end;

Виведення обчисленого результату:

{Виведення оптимальної вартості визначених предметів.}

writeln(f_OUt, c[k, n].val);

{Початок визначення предметів,}

і := k; j := п;

{починаючи з правого нижнього елемента таблиці.}

while j > 0 do

{Поки не переглянуті всі предмети,}

begin

write(f_OUt, j, '—>', С[І, j].take, '; ');{виведення інформації про кожний предмет;}

 

{визначення номера попереднього рядка}

dec(i, weight[j] * с[і, j].take);

{і перехід до нього;}

dec(j);

{перехід до попереднього рядка таблиці.}

end;

Визначення оцінки ефективності виконання алгоритму задачі про рюкзак не представляє жодних труднощів. Обробляючи кожний елемент таблиці розміром п*т, ми виконували відповідно пт дій. Для кожного такого елемента ще виконувало­ ся лише дві дії: визначалася сума вартостей у випадку взяття і невзяття поточного предмета. Оскільки цими двома діями мож­ на знехтувати, то загальна оцінка алгоритму становить О(пт).

Тестування розробленого алгоритму динамічного програ­ мування для задачі про рюкзак повинне передбачати розгляд як невеликих за кількістю предметів {п £j 10), так і значно біль­ ших (наприклад, п 4 100). У цих тестах повинні бути також

226

передбачені варіанти, коли розгляд предметів упорядкований за спаданням їх ваги та не упорядкований, коли вартість пред­ метів змінюється так само, як і їх вага, та випадок, коли зміна вартості предметів не залежить від зміни значень їх ваги.

Загальна задача динамічного програмування

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

Нехай розв'язується деяка задача S. Для її розв'язання зада­ ні вхідні дані S0, що надалі оброблятимуться. У результаті за­ стосування до цих вхідних даних розробленого оптимізаційного алгоритму U її буде перетворено у вигляд Sn. Процес виконання алгоритму можна представити як деяку функцію W(U), що дає кілька варіантів розв'язків. Оскільки задача динамічного про­ грамування є задачею оптимізаційною, то серед усіх отриманих варіантів відповідей треба вибрати найкращий W*(U).

Методика розв'язування задач динамічного програмування бу­ ла запропонована Р. Беллманом у 1955 р. і полягає в наступному.

Задача, що розв'язується, розбивається на окремі етапи. Як ми бачили на конкретних прикладах, такими етапами є: ок­ ремі зони, що утворюють відстань між двома населеними пунк­ тами при прокладанні дороги; окремі підприємства при визна­ ченні ефективного вкладення інвестицій у промислову галузь; почерговий розгляд окремих предметів під час відбору найдо­ рожчих і одночасно найлегших серед них при обмеженні на їх сумарну вагу.

Кожний з етапів є окремою підзадачею поставленої загаль­ ної задачі і розв'язується одним і тим самим розробленим оптимізаційним алгоритмом. Однак вибір розв'язків кожної на­ ступної підзадачі залежить від розв'язків попередньої, і тому їх можна назвати залежними. Будемо вважати, що на першому етапі вхідна інформація S0 перетворюється алгоритмом U у вигляд Sv Тепер при виконанні наступного етапу вхідними даними для нього буде вже Sv При цьому застосування алго­ ритму на даному етапі може дати багато варіантів розв'язків w^u), серед яких ми вибираємо ті, які надалі приведуть до найкращого кінцевого результату, тобто є перспективними. Позначимо їх w^iu). Аналогічно будуть перетворюватися вхідні дані на наступних етапах S2, ..., Sn_v Отже, оптимізація всієї задачі зводиться до визначення оптимальних результатів застосування розробленого алгоритму w*(u) на кожному окре­ мому етапі.

227

P. Беллманом був сформульований принцип оптимальності:

якою не була б інформація, що обробляється, перед черговим етапом необхідно вибрати стратегію на поточному етапі так, щоб виграш на цьому етапі плюс оптимальний виграш на всіх наступних етапах був максимальним.

Нагадаємо, як ми розв'язували всі чотири задачі динамічно­ го програмування. Кожний етап задачі, починаючи з першого, ми розв'язували за залишковим принципом, тобто вважали, що всі решта об'єктів, окрім вже розглянутих, досліджені, і визначали стратегію з урахуванням цього факту. Звідси ви­ пливає, що оптимальну стратегію можна отримати, якщо спо­ чатку знайти оптимальну стратегію на n-му етапі, потім на двох останніх етапах і так далі до першого етапу.

Таким чином, згідно з принципом Беллмана розв'язування задачі динамічного програмування доцільно починати з визна­ чення оптимального розв'язку на останньому га-му етапі. Для того щоб знайти цей розв'язок, необхідно зробити різні перед­ бачення щодо закінчення передостаннього етапу. Така стра­ тегія, що вибрана при певних передбаченнях про те, як може закінчитися попередній етап, називається умовно оптималь­ ною стратегією. Тобто принцип оптимальності вимагає знахо­ дити на кожному етапі умовно оптимальну стратегію для будьякого з можливих результатів попереднього етапу.

Поступово здійснюючи описаний ітераційний процес, дійде­ мо до першого етапу. На цьому етапі нам відомо, в якому стані може знаходитись інформація, що обробляється, а тому немає потреби робити передбачення щодо її допустимих станів. Зали­ шається лише вибрати стратегію, яка є найкращою з урахуван­ ням умовно оптимальних стратегій, уже прийнятих на всіх попередніх етапах.

Таким чином, проходячи послідовно всі етапи з кінця до по­ чатку, можна визначити максимальне значення виграшу за п кроків.

Щоб знайти оптимальну стратегію, тобто визначити шука­ ний розв'язок задачі, необхідно пройти всю послідовність етапів у зворотному порядку. Теоретично ця послідовність ви­ глядає так: на першому етапі в якості оптимальної стратегії не­ обхідно взяти знайдену умовну оптимальну стратегію. На дру­ гому етапі визначити стан інформації S1*, яка отримується для задачі в результаті вибору умовної оптимальної стратегії Uj*. Цей стан визначає знайдена умовна оптимальна стратегія и2°, яку тепер вважатимемо оптимальною і т. д. У результаті цього знаходимо розв'язок задач, тобто максимально можливий ви­ граш та оптимальну стратегію £/*, що включає в себе умовну оптимальну стратегію на окремих етапах: U* = (и^, и2, ..., ип*).

228

Зробимо ще одне зауваження: у будь-якій задачі динамічно­ го програмування «початок» і «кінець» можна поміняти місця­ ми. Це повністю рівнозначне описаній вище методиці щодо ви­ конуваних розрахунків, однак при такому підході виникають незручності щодо пояснення ідеї методу: простіше аргументу­ вати, посилаючись на умови, що «вже склалися» до початку да­ ного кроку, ніж на ті, які ще «попереду» цього кроку. По суті, обидва підходи абсолютно рівносильні і досить умовні. При­ кладом цього може служити перша розглянута задача про прокладання найвигіднішого шляху між двома пунктами. Ми її розв'язували від пункту А до пункту В, а можна було навпа­ ки. При цьому результуюча відповідь була б однаковою.

У кожній розглянутій задачі визначалася оцінка ефектив­ ності роботи розробленого для її розв'язання алгоритму. І справді, оцінку менше ніж 0(пт) для задач динамічного про­ грамування отримати неможливо, оскільки у кращому разі нам доводиться хоч один раз обробляти кожний елемент таб­ лиці розмірністю п*т. Але трапляються й об'ємніші щодо часу виконання задачі. З цим ми ознайомилися в задачі про роз­ поділ ресурсів. Ученими доведено, що максимальною оцінкою ефективності роботи алгоритмів, які базуються на методі ди­ намічного програмування, можна вважати 0(пт log(nm)).

Критерії застосування задач динамічного програмування

Як розпізнати задачу динамічного програмування

Насамперед варто зазначити, що найкращим критерієм «впізнавання» задач динамічного програмування є власний значний досвід у розв'язуванні таких задач. Разом з тим, можна дати й деякі поради.

Спочатку треба розглянути питання про можливість роз­ биття задачі на етапи, що найчастіше міститься вже у форму­ люванні самої задачі, як, наприклад, дослідження (аналіз) фінансування одного підприємства по роках або кількох окремих підприємств в економічних задачах. Але інколи таке розбиття необхідно робити штучно, як, наприклад, у задачі про прокладання найвигіднішого шляху. Кількість етапів у задачі найчастіше визначається так само в умові задачі. Якщо ж їх до­ водиться визначати самостійно, то необхідно орієнтуватися на тип змінних, обумовлених у задачі, на критерії визначення кінцевого результату. Не можна забувати, що в разі збіль­ шення кількості етапів значно зростає об'єм розрахунків, що у свою чергу впливає на загальний час виконання алгоритму. Але все ж таки подібні ситуації трапляються не так часто і,

229

уважно читаючи умову задачі, можна однозначно визначити кількість етапів, на які необхідно розбити задачу.

Діагностика задачі динамічного програмування неможлива без визначення наявності принципу оптимальності Беллмана. Якщо оптимальний розв'язок усієї задачі містить оптимальний розв'я­ зок окремих її підзадач, то є підстави приступати до розробки алгоритму, що базується на методі динамічного програмування.

Далі необхідно звернути увагу на те, чи можливо кожну з підзадач розв'язувати лише один раз, заносячи відповіді в спеціальну таблицю, і надалі користуватися цими відповідями під час розв'язування наступних підзадач, не витрачаючи час на їх повторне розв'язування.

Необхідно також обов'язково визначити, від скількох пара­ метрів залежить вибір стратегії перед кожним наступним кро­ ком виконання алгоритму. У задачі про прокладання шляху їх було два - рух на сусідню клітинку таблиці вгору або вправо, у задачі про розподіл ресурсів і про завантаження рюкзака один - максимальний виграш. Як ми бачили, такі задачі розв'язують­ ся досить нескладно, результати їх поетапного дослідження можна записувати у двовимірні таблиці й визначати оптималь­ ний результат. Однак на практиці трапляються і більш складні випадки. У такому разі варто спростити умову задачі, змен­ шивши кількість досліджуваних параметрів і не переобтяжую­ чи її зайвими деталями.

Як розв'язати задачу динамічного програмування

Підсумовуючи все вищесказане і враховуючи конкретні розглянуті приклади та загальні поради щодо їх розв'язання, можна запропонувати таку схему розробки алгоритму задачі динамічного програмування:

1)розбити задачу на етапи, визначивши об'єкти досліджен­ ня (стовпці таблиці);

2)визначити ситуації, в яких можуть опинятися ці об'єкти на кожному етапі (рядки таблиці);

3)вивести загальну формулу вибору оптимальної стратегії на кожному етапі для кожної ситуації;

4)розробити структуру таблиці для збереження поточної інформації про стан об'єктів на кожному етапі з урахуванням усіх можливих ситуацій;

5)визначити умовну оптимізацію на га-му етапі (перший крок виконання алгоритму);

6)визначити умовну оптимізацію на (п - 1)-му, (я - 2)-му,

..., 2-му етапах (відповідно другий, третій, ..., (п - 1)-й кроки виконання алгоритму), використовуючи виведену для цього за­ гальну формулу;

230

7)визначити умовну оптимізацію на 1-му етапі (n-й крок виконання алгоритму) і одночасно результуючу оптимізацію усієї задачі, використовуючи загальну формулу;

8)визначити оптимальну стратегію на кожному етапі, «чи­ таючи» з таблиці відповідні рекомендації у зворотному поряд­ ку, починаючи з 1-го етапу (n-й крок виконання алгоритму) і завершуючи п-м етапом (перший крок виконання алгоритму); при цьому необхідно враховувати розроблену загальну форму­ лу вибору оптимальної стратегії.

Завдання

1.Розробити та реалізувати у вигляді програми алгоритм ви­ значення найвигіднішого шляху між двома пунктами.

2.Виконати завдання 1 для випадку, коли розбиття області розв'язку задачі становить п < 10, т ^ 10. Результат вико­ нання програми вивести у файл.

3.Виконати завдання 1 для випадку, коли розбиття області розв'язку задачі становить 10 < п < 100, 10 < т ^ 100. Ре­ зультат виконання програми вивести у файл.

4.Розробити та реалізувати у вигляді програми алгоритм за­ дачі про найбільшу спільну під послідовність.

5.Виконати завдання 4 для випадку, коли довжини послідов­ ностей а і b відповідно п ^ 10 і т ^ 10. Результат виконання програми вивести у файл.

6.Виконати завдання 4 для випадку, коли довжини послідов­ ностей а і Ь відповідно 10 < п < 100 і 10 < т < 100. Результат виконання програми вивести у файл.

7.Розробити та реалізувати у вигляді програми алгоритм за­ дачі про розподіл ресурсів.

8.Виконати завдання 7 для випадку, коли кількість під­ приємств п ^ 10 і розмір інвестицій становить k ^ 10. Резуль­ тат виконання програми вивести у файл.

9.Виконати завдання 7 для випадку, коли кількість підпри­ ємств 10 < п ^ 100 і розмір інвестицій становить 10 < k ^ 100. Результат виконання програми вивести у файл.

10.Розробити та реалізувати у вигляді програми алгоритм за­ дачі про рюкзак.

11.Виконати завдання 10 для випадку, коли кількість пред­ метів п ^ 10 і максимальна допустима вага рюкзака стано­ вить k ^ 10. Результат виконання програми вивести у файл.

12.Виконати завдання 10 для випадку, коли кількість предметів 1 0 < п ^ 1 0 0 і максимальна допустима вага рюкзака становить 10 < k =* 100. Результат виконання програми вивести у файл.

13. Проаналізувати результати виконання завдань 2-3, 5-6, 8-9,11-12.

231

Соседние файлы в папке Методи побудови алгоритмів та їх аналіз