О.О.П / ооп / 4_кол / К курсовой / Методи побудови алгоритмів та їх аналіз / 62_201
.PDFbegin |
|
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