
- •Контрольні питання до курсу “Комбінаторні методи та алгоритми”
- •Класифікація оптимізаційних задач
- •Задачі лінійної, нелінійної, цілочисельної, булевої, стохастичної та комбінаторної оптимізації
- •Формулювання комбінаторних оптимізаційних задач
- •Типові приклади задач комбінаторного типу. Комбінаторні задачі в програмній інженерії (приклади, формулювання).
- •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 Класифікація методів та алгоритмів для розв'язування задачі трасування, їх переваги та недоліки. Обчислювальна складність.
18. Алгоритми визначення мінімальних зв'язувальних дерев, їх обчислювальна та ємнісна складність. Алгоритм Прима
Алгоритм Прима - алгоритм побудови мінімального кістякового дерева зваженого зв'язного неорієнтованого графа.
Побудова починається з дерева, що включає в себе одну (довільну) вершину. Протягом роботи алгоритму дерево розростається, поки не охопить всі вершини вихідного графа. На кожному кроці алгоритму до поточного дереву приєднується найлегше з ребер, що з'єднують вершину з побудованого дерева і вершину, що не належить дереву.
Алгоритм:
Спочатку ребра сортують за зростанням ваги.
Додають найменше ребро в дерево.
Зі списку ребер із найменшою вагою вибирають таке нове ребро, щоб одна з його вершин належала дереву, а інша — ні.
Це ребро додають у дерево і знову переходять до кроку 3.
Робота закінчується, коли всі вершини будуть у дереві.
Обчислювальна складність: O(n)..O(n3)
Ємнісна складність: O(E+V*log V)..O(V2), де E – ребра графу, V – його вершини.
Алгоритм Краскала (Крускала)
Спочатку поточна множина ребер встановлюється порожньою. Потім, поки це можливо, проводиться наступна операція: з усіх ребер, додавання яких до вже наявної множини не викличе появи в ньому циклу, вибирається ребро мінімальної ваги і додається до вже присутніх у множині. Коли таких ребер більше немає, алгоритм завершений. Підграф даного графа, що містить всі його вершини і знайдена множина ребер, і є його зв'язним деревом мінімальної ваги.
Обчислювальна складність алгоритму: O(E * log(E)), де E – ребра графу.
Ємнісна складність: O(M), де M – кількість вершин, які входять в дерево.
19. Алгоритми визначення оптимальних шляхів в графах, їх обчислювальна та ємнісна складність. Жадібний алгоритм (задача комівояжера)
Жадібний алгоритм для розв’язання задачі комівояжера (Greedy algorithm) належить до алгоритмів побудови маршруту. Алгоритми побудови маршруту належать до найпростіших методів знаходження розв’язків задачі комівояжера. За кожен крок виконання алгоритму до знайденої частини маршруту додається нове ребро. Алгоритм припиняє роботу, коли розв’язок знайдено і ніколи не намагається покращити його. До найвідоміших алгоритмів побудови маршруту належать:
Жадібний алгоритм будує маршрут поступово, на кожному кроці додаючи найкоротше ребро, яке ще не належить маршруту. Ребро додається при умові, що воно не створить циклу всередині маршруту. Алгоритм завершується, коли додано N ребер або кожна точка має степінь 2. Кожне ребро може бути додане лише один раз. Обчислювальна складність алгоритму - O(N2 log2(N)).
ЖАДІБНИЙ АЛГОРИТМ.
ВХІДНІ ДАНІ: множина точок V розмірністю N, множина ребер E.
ВИХІДНІ ДАНІ: маршрут T, що складається з вибраних ребер множини E.
ВІДСОРТУВАТИ усі ребра множини E;
ВИБРАТИ найкоротше ребро e та ВИЛУЧИТИ його з множини E;
ЯКЩО додавання ребра e до множини T не створить циклу при кількості ребер менше N, ТО ДОДАТИ це ребро до множини T;
ЯКЩО у маршруті T не міститься N ребер, ТО ВЕРНУТИСЬ на КРОК 2.
КІНЕЦЬ АЛГОРИТМУ.
Згідно проведених експериментів, жадібний алгоритм забезпечує якість отриманого маршруту, приблизно на 20% гіршу від оптимального. При декомпозиції задачі комівояжера у випадках, коли висока якість маршруту не є необхідною умовою, жадібний алгоритм може застосовуватись для розв’язування підзадач малих розмірностей.