
- •Контрольні питання до курсу “Комбінаторні методи та алгоритми”
- •Класифікація оптимізаційних задач
- •Задачі лінійної, нелінійної, цілочисельної, булевої, стохастичної та комбінаторної оптимізації
- •Формулювання комбінаторних оптимізаційних задач
- •Типові приклади задач комбінаторного типу. Комбінаторні задачі в програмній інженерії (приклади, формулювання).
- •5. Класифікація комбінаторних оптимізаційних задач.
- •6. Задачі поліноміальних та неполіноміальних типів. Класи р та np. Приклади.
- •7. Критерії оптимізації.
- •8. Багатокритеріальні задачі.
- •9. Зона Парето.
- •10. Елементи теорії графів та гіперграфів
- •11. Характеристичні числа графів
- •12. Числа внутрішньої та зовнішньої стійкості
- •13. Хроматичне число
- •14. Планарність графів. Теорема Понтрягіна-Куратовського.
- •15. Проектування алгоритмів. Точність, обчислювальна та ємнісна складність. Проблема стопу.
- •16. Алгоритми пошуку найбільшого (найменшого елемента) списку. Обчислювальна та ємнісна складність алгоритму.
- •17. Алгоритми впорядкування списку. Обчислювальна та ємнісна складність алгоритму.
- •Характеристики алгоритмів сортування:
- •Алгоритм сортування вибіркою (Selection Sort)
- •Алгоритм сортування бульбашкою (Bubble Sort)
- •Алгоритм вставки або включення (Insertion Sort)
- •Алгоритм швидкого сортування (Quick Sort)
- •Алгоритм злиття (Merge Sort)
- •Алгоритм позиційного сортування (Radix Sort)
- •Блокове сортування або сортування комірками (Bucket Sort)
- •18. Алгоритми визначення мінімальних зв'язувальних дерев, їх обчислювальна та ємнісна складність. Алгоритм Прима
- •Алгоритм Краскала (Крускала)
- •19. Алгоритми визначення оптимальних шляхів в графах, їх обчислювальна та ємнісна складність. Жадібний алгоритм (задача комівояжера)
- •Алгоритм найближчого сусіда
- •Алгоритм Ліна-Кернігана
- •Алгоритм Дейкстри
- •Алгоритм:
- •Хвильовий алгоритм
- •Алгоритм:
- •Транспортні мережі. Алгоритми визначення найбільшого потоку.
- •Методи розв'язування задач дискретної оптимізації.
- •Метод гілок та границь. Переваги та недоліки.
- •Жадібні алгоритми. Переваги та недоліки.
- •Алгоритми найближчого сусіда. Переваги та недоліки.
- •Метод моделювання відпалу. Переваги та недоліки.
- •Генетичні та еволюційні методи. Переваги та недоліки.
- •39 Класифікація методів та алгоритмів для розв'язування задачі трасування, їх переваги та недоліки. Обчислювальна складність.
Жадібні алгоритми. Переваги та недоліки.
Жадібний алгоритм — простий і прямолінійний евристичний алгоритм, який приймає найкраще рішення, виходячи з наявних на поточному етапі даних, не турбуючись про можливі наслідки, сподіваючись врешті-решт отримати оптимальне рішення. Легкий в реалізації і часто дуже ефективний за часом виконання. Багато задач не можуть бути розв'язані з його допомогою.
Загального критерію оцінки застосовності жодного алгоритму для вирішення конкретного завдання не існує, однак, для завдань, що вирішуються жадібними алгоритмами, характерні дві особливості: по-перше, до них застосуємо Принцип жодного вибору, а по-друге, вони мають властивість Оптимальності для підзадач.
Кажуть, що до оптимізаційної задачі застосуємо принцип жодного вибору, якщо послідовність локально оптимальних виборів дає глобально оптимальне рішення. У типовому випадку доказ оптимальності слід такою схемою:
Доводиться, що жадібний вибір на першому кроці не закриває шляху до оптимального рішення: для всякого рішення є інше, узгоджене з жадібним вибором і не гірше першого.
Показується, що подзадача, що виникає після жодного вибору на першому кроці, аналогічна вихідної.
Міркування завершується за індукції.
Кажуть, що задача має властивість
оптимальності для підзадач, якщо
оптимальне рішення задачі містить в
собі оптимальні рішення для всіх її
підзадач. Наприклад, в задачі про вибір
заявок можна помітити, що якщо
-
Оптимальний набір заявок, що містить
заявку номер 1, то
-
Оптимальний набір заявок для меншого
безлічі заявок
,
Що складається з тих заявок, для яких
.
Приклади:
Розмін монет
Завдання. Монетна система деякого
держави складається з монет номіналом
.
Потрібно видати суму
найменшим
можливим кількістю монет.
Жадібний алгоритм вирішення цієї задачі
такий. Береться найбільшу можливу
кількість монет гідності
:
.
Таким же чином отримуємо, скільки
потрібно монет меншого номіналу, і т.
д.
Для даної задачі жадібний алгоритм не завжди дає оптимальне рішення. Наприклад, суму в 24 копійки монетами в 1, 5 і 7 коп. жадібний алгоритм розмінює так: 7 коп. - 3 шт., 1 коп. - 3 шт., В той час як правильне рішення - 7 коп. - 2 шт., 5 коп. - 2 шт. Тим не менш, на всіх реальних монетних системах жадібний алгоритм дає правильну відповідь.
Вибір заявок
Формулювання № 1. Дано
заявок
на проведення занять в деякій аудиторії.
У кожній заявці вказано початок і кінець
заняття (
і
для
-Ї
заявки). У разі перетину заявок можна
задовольнити лише одну з них. Заявки з
номерами
і
сумісні,
якщо інтервали
і
не
перетинаються (тобто
або
).
Завдання про вибір заявок полягає в
тому, щоб набрати максимальну кількість
спільних один з одним заявок.
Формулювання № 2. На конференції, щоб відвести більше часу на неформальне спілкування, різні секції рознесли по різних аудиторій. Вчений з надзвичайно широкими інтересами хоче відвідати кілька доповідей, які проходять в різних секціях. Відомо початок і кінець кожної доповіді. Визначити, яку максимальну кількість доповідей можна відвідати.
Наведемо жадібний алгоритм, вирішальний
дану задачу. При цьому вважаємо, що
заявки впорядковані в порядку зростання
часу закінчення. Якщо це не так, то можна
відсортувати їх за час
;
Заявки з однаковим часом кінця володіємо
в довільному порядку.
Activity-Selector(s,f)
length[s]
for
to do
if
then
return A
На вхід даному алгоритму подаються масиви початку і закінчення занять. Безліч A складається з номерів вибраних заявок, а j - номер останньої заявки. Жадібний алгоритм шукає заявку, що починається не раніше закінчення j-тій, потім знайдену заявку включає в A, а j присвоює її номер. Таким чином, кожен раз ми вибираємо те (ще не почалося) заняття, до кінця якого залишилося найменше часу.
Алгоритм працює за
,
Тобто сортування плюс вибірка. На кожному
кроці вибирається найкраще рішення.
Покажемо, що в підсумку вийде оптимум.
Доказ. Зауважимо, що всі заявки відсортовані по неубиванію часу закінчення. Заявка номер 1, очевидно, входить до оптимум (якщо немає, то замінимо найбільш ранню заявку в оптимумі на неї, від цього гірше не стане). Виконав всі заявки, які суперечать першої, отримаємо вихідну завдання з меншою кількістю заявок. Розмірковуючи по індукції, аналогічним чином приходимо до оптимального рішення.
Інші жадібні алгоритми
Алгоритм Хаффмана (адаптивний алгоритм оптимального префіксних кодування алфавіту з мінімальною надмірністю).
Алгоритм Краскала (пошук остовного лісу мінімальної ваги в графі).
Алгоритм Прима (пошук остовного дерева мінімальної ваги в зв'язному графі).
Алгоритм Лін-Керніга (Кластеризація графа).
Узагальненням жодних алгоритмів є алгоритм Радо - Едмондс.
Завдання, в яких жадібні алгоритми не дають оптимального рішення
Для ряду задач, які відносяться до класу NP, жадібні алгоритми не дають оптимального рішення. До них відносяться:
задача комівояжера;
задача мінімальної розмальовки графа;
задача розбиття графа на підграфи;
завдання виділення максимальної кліки;
завдання, пов'язані зі складанням розкладів.
Тим не менш, у ряді завдань жадібні алгоритми дають непогані наближені рішення.