Скачиваний:
37
Добавлен:
30.05.2020
Размер:
3.32 Mб
Скачать

begin

 

mark_n[j - n] := і;

{у масив mark_n i}

mark_m[i] := j - n;

{у масив mark_m.}

end;

 

flag_fin := true;

{Ініціалізація умови завершення алгоритму.}

for І := 1 to П do

{Перетворення Егерварі для відповідної}

if mark_m[i] = 0 then Egervary; {досяжної вершини з кожної ненасиченої.} until f lag_f in; {Завершення алгоритму за умови незмінності поточного стану таблиці.}

Реалізація будь-якого алгоритму в першу чергу залежить від власного стилю програміста та техніки його програмуван­ ня. Саме тому не варто наводити тексти процедур, що викорис­ товуються у запропонованому фрагменті. Можна лише зазна­ чити, що для реалізації процедури побудови максимального паросполучення були використані динамічні масиви copy і /, перший з яких містить перетворену інформацію з масиву С, а другий - відповідний йому масив для фіксації включених до паросполучення прямих та зворотних ребер. Розмірність цих масивів становить (п + т)*(п + пі). Це можна пояснити такими обставинами. У масиві С його рядки відповідають вершинам першої групи (кандидати), а стовпці - вершинам другої групи (посади). У масивах copy і f міститься інформація про наявність ребер між будь-якою парою вершин, що розглядаються, тому і в рядках, і в стовпцях цих масивів розміщено номери всіх вер­ шин. І останнє пояснення. Логічна змінна flag_fin у процедурі Egervary набуває значення false у разі, якщо було зроблено пе­ ретворення в таблиці С, що дає змогу продовжити виконання алгоритму, тобто здійснити наступну ітерацію.

Оскільки наведений алгоритм є ітераційним і базується на операціях приведення, то визначення оцінки ефективності його роботи може бути таким. Якщо вважати, що приведення відбувається з кожним елементом таблиці розмірністю п*т, то таких дій буде 0(пт). На кожному кроці виконується побудова максимального паросполучення лише на нульових елементах таблиці. Тому вона у найгіршому випадку також не перевищує 0(пт). Перетворення Егерварі відбувається лише на вершинах, досяжних з ненасичених вершин. Тому їх кількість так само не перевищує 0(пт). Можемо визначити оцінку виконання однієї ітерації: 0(3пт) ~ 0(пт).

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

200

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

У посібнику продемонстрований приклад мінімізації задачі про призначення. Тому варто спробувати реалізувати цю саму задачу в разі максимізації результату. І як завжди можна пора­ дити згенерувати великі тести, наприклад для п> 100 і m > 100.

Завдання

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

2. Виконати завдання 1 для випадку, коли п = т, п < 10,

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

3.Виконати завдання 1 для випадку, коли п <> т, п < 10,

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

4. Виконати завдання 1 для випадку, коли п = т, п ^ 10,

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

5.Виконати завдання 1 для випадку, коли п <> т, п ^ 10,

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

6.Проаналізувати результати виконання завдань 2-5.

/

 

Запитання для самоконтролю

1.Як формулюється задача лінійного програмування про призна­ чення?

2.Яким графом представляється задача про призначення? На­ ведіть власний приклад задачі про призначення і зобразіть його графічно.

3.Як формулюється задача про призначення в термінах лінійного програмування?

4.Як привести задачу про призначення, що максимізує шуканий розв'язок до задачі, що мінімізує його?

201

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