Моделювання на ЕОМ. Задачі з теорії графів. Алгоритми на графах.
1. Задачі з теорії графів.
Алгоритми на графах.
Для спеціальності 151 “Автоматизація та комп’ютерно-
інтегровані технології”, КНУБА, 2018
Соболевська Л.Г. sobolevska@atp.in.ua +38 066 251 89 80
ЧИСЛОВІ МЕТОДИ ТА
МОДЕЛЮВАННЯ НА ЕОМ
4. Проблема семи мостів Кенігсберга
Эйлер прийшов до наступних висновків:
Число непарних вершин графа повинно бути
парне. Не може існувати граф, що мав би
непарне число непарних вершин.
Якщо всі вершини графа парні, то можна, не
відриваючи олівця від паперу, накреслити граф,
при цьому можна починати з будь-якої вершини
графа й завершити його в тій же вершині.
Граф з більш ніж двома непарними вершинами
неможливо накреслити одним розчерком.
4 КНУБА, ФАІТ, 2018
5. Алгоритм пошуку в глибину
depth-first search, DFS
Крок 1. Всім вершин графа присвоюється значення не
відвідана. Вибирається перша вершина і позначається
як відвідана.
Крок 2. Для останньої поміченої як відвідана вершини
вибирається суміжна вершина, яка є першою
поміченою як не відвідана, і їй присвоюється
значення відвідана. Якщо таких вершин немає, то
береться попередня позначена вершина.
Крок 3. Повторити крок 2 до тих пір, поки всі
вершини не будуть позначені як відвідані
5 КНУБА, ФАІТ, 2018
7. Алгоритм пошуку в глибину
7 КНУБА, ФАІТ, 2018
Вихідний граф Ліс обходу в глибину
8. Класифікація ребер при обході в
глибину
Дуги орієнтованого графа діляться на категорії залежно від їх ролі в
обході в глибину. Це класифікація застосовується при вирішенні різних
завдань, що базуються на методі обходу.
Дуги в цьому лісі класифікуються на наступні:
Дуги дерева - це безпосередньо дуги, з яких складається ліс,
побудований в результаті обходу.
Зворотні дуги - це все дуги (u, v), що з'єднують вершину u з її предком
v в одному з дерев лісу обходу в глибину. (Зустрічні дуги, що
утворюють цикл довжини 2, можливі в орієнтованих графах,
вважаються зворотними дугами також).
Прямі дуги - це дуги, що з'єднують вершину з її нащадком, але не
входять в ліс обходу в глибину.
Перехресні дуги - це всі інші дуги орієнтованого графа, які не попали в
одну з перерахованих вище категорій. Такі дуги, наприклад, можуть
з'єднувати дві вершини одного дерева обходу, якщо жодна з цих
вершин не є предком іншої.
8 КНУБА, ФАІТ, 2018
11. Застосування методу обходу в
глибину
1. Пошук лексикографічно найменшого шляху в
графі з заданої вершини
2. Перевірка, чи є одна вершина дерева предком
іншої
3. Топологічне сортування графа
4. Завдання LCA (знаходження найменшого
спільного предка)
5. Перевірка орграфа на ациклічності і
знаходження деякого циклу в графі
6. Пошук компонент сильної зв'язності в орграфі
7. Пошук мостів і точок зчленування в
неорієнтованому графі
11 КНУБА, ФАІТ, 2018
12. Алгоритм пошуку в ширину
Breadth-First Search, BFS
Крок 1. Всім вершин графа присвоюється значення не
відвідана. Вибирається перша вершина і позначається
як відвідана (і заноситься в чергу).
Крок 2. Відвідується перша вершина з черги (якщо
вона не позначена як відвідана). Всі її сусідні вершини
заносяться в чергу. Після цього вона видаляється з
черги.
Крок 3. Повторюється крок 2 до тих пір, поки черга не
порожня.
12 КНУБА, ФАІТ, 2018
16. Задача комівояжера
Travelling Salesman Problem, TSP
знаходження найвигіднішого маршруту, що
проходить через вказані міста.
критерій вигідності маршруту (найкоротший,
найдешевший, сукупний критерій тощо)
Зазвичай маршрут повинен проходити через
кожне місто тільки один раз.
Відноситься до класу NP-важких задач.
16 КНУБА, ФАІТ, 2018
17. Методи розв’язку задачі комівояжера
КНУБА, ФАІТ, 201817
повний перебор (brute force)
випадковий перебор
жадібні алгоритми
метод найближчого сусіда
метод включення найближчого міста
метод найдешевшого включення
метод мінімального остовного дерева
метод імітації відпалу
18. Жадібний алгоритм
Greedy algorithm
алгоритм, що полягає в прийнятті локально
оптимальних рішень на кожному етапі,
допускаючи, що кінцеве рішення також
виявиться оптимальним.
18 КНУБА, ФАІТ, 2018
19. Алгоритм імітації відпалу
КНУБА, ФАІТ, 201819
(Simulated annealing) - загальний алгоритмічний
метод вирішення задачі глобальної оптимізації,
особливо дискретної і комбінаторної
оптимізації.
Один із прикладів методів Монте-Карло.
Використання:
Навчання нейронних мереж
Рішення комбінаторних задач
Рішення задачі комівояжера
21. Мурашиний алгоритм
КНУБА, ФАІТ, 201821
алгоритм оптимізації наслідуванням мурашиної
колонії, Ant colony optimization, ACO.
один з ефективних поліноміальних алгоритмів
для знаходження наближених рішень задачі
комівояжера, а також вирішення аналогічних
завдань пошуку маршрутів на графах.
Перша версія алгоритму, запропонована
доктором наук Марко Дориго в 1992 році, була
спрямована на пошук оптимального шляху в
графі.
23. Задача про кліку.
Задача про кліку відноситься до класу NP-
повних задач.
Вперше вона була сформульована в 1972 році
Річардом Карпом.
Клікою в неорієнтованому графі називається
підмножина вершин, кожні дві з яких з'єднані
ребром графа.
Іншими словами, це повний підграф
початкового графа.
Розмір кліки визначається як число вершин в
ній.
23 КНУБА, ФАІТ, 2018
24. Задача про кліку
КНУБА, ФАІТ, 201824
задача розпізнавання
Потрібно визначити,
чи існує в заданому
графі G кліка розміру k.
Обчислювальна задача
знайти в заданому
графі G кліку
максимального
розміру.
1
3
5
6
4
2
25. Розфарбування графів
Хроматичної число графа G - мінімальне число
кольорів, в які можна розфарбувати вершини
графа G так, щоб кінці будь-якого ребра мали
різні кольори. Зазвичай позначається χ (G).
Розфарбувати можна:
Вершини;
Ребра.
25 КНУБА, ФАІТ, 2018
30. Властивості мінімального остову.
Мінімальний остов унікальний, якщо ваги всіх
ребер різні. В іншому випадку, може існувати кілька
мінімальних остовів (конкретні алгоритми зазвичай
отримують один з можливих остовів).
Мінімальний остов є також і остовом з мінімальним
добутком ваг ребер. (Доводиться це легко, досить
замінити ваги всіх ребер на їх логарифми).
Мінімальний остов є також і остовом з мінімальною
вагою найважчого ребра. (Це твердження випливає
з справедливості алгоритму Крускала)
30 КНУБА, ФАІТ, 2018
31. Алгоритм Крускала
(або алгоритм Краскала) - ефективний алгоритм
побудови мінімального остовного дерева зваженого
зв'язного неорієнтованого графа. Алгоритм вперше
описаний Джозефом Крускалом в 1956 році.
Формулювання.
Спочатку поточна множина ребер встановлюється
порожньою. Потім, поки це можливо, проводиться
наступна операція: з усіх ребер, додавання яких до
вже наявної множини не викличе появу в ній циклу,
вибирається ребро мінімальної ваги і додається до
вже наявної множини. Коли таких ребер більше
немає, алгоритм завершений. Підграф даного графа,
що містить всі його вершини і знайдену множину
ребер є його остовним деревом мінімальної ваги.
31 КНУБА, ФАІТ, 2018
35. Алгоритм Прима
Алгоритм Прима - алгоритм побудови мінімального остовного дерева
зваженого зв'язного неорієнтованого графа. Алгоритм вперше був
відкритий в 1930 році чеським математиком Войцехом Ярніка,
пізніше перевідкритий Робертом Прима в 1957 році, і, незалежно від
них, Е. Дейкстрой в 1959 році.
Формулювання.
На вхід алгоритму подається зв'язний неорієнтований граф. Для
кожного ребра задається його вага.
Спочатку береться довільна вершина і знаходиться ребро, інцидентне
даній вершині із найменшою вагою. Знайдене ребро і дві вершини
з'єднані їм утворюють дерево. Потім, розглядаються ребра графа,
один кінець яких - вже належить дереву, а інший - ні; з цих ребер
вибирається ребро найменшої вартості. Обране на кожному кроці
ребро приєднується до дерева. Таким чином, при виконанні кожного
кроку алгоритму, висота формованого дерева збільшується на 1.
Зростання дерева відбувається до тих пір, поки не будуть вичерпані
всі вершини вихідного графа.
Результатом роботи алгоритму є мінімальний остов.
35 КНУБА, ФАІТ, 2018
38. Алгоритм Борувки
це алгоритм знаходження мінімального остовного дерева
в графі.
Вперше був опублікований в 1926 році Отакаром Борувка
як метод знаходження оптимальної електричної мережі в
Моравії. Кілька разів був перевідкритий, наприклад
Флорек, Перкаль і Солліне. Останній, крім того, був
єдиним західним ученим з цього списку, і тому алгоритм
часто називають алгоритмом Солліне, особливо в
літературі з паралельних обчислень.
Формулювання.
Робота алгоритму складається з декількох ітерацій, кожна
з яких складається з послідовного додавання ребер до
остовного лісу графа, до тих пір, поки ліс не
перетвориться в дерево, тобто, ліс, що складається з однієї
компоненти зв'язності.
38 КНУБА, ФАІТ, 2018
40. Алгоритми пошуку найкоротшого
шляху
Алгоритм Дейкстри (Dijkstra's algorithm) -
алгоритм на графах, винайдений
нідерландським вченим Едсгером Дейкстрою в
1959 році.
Знаходить найкоротші шляхи від однієї з
вершин графа до всіх інших.
Алгоритм працює тільки для графів без ребер
негативного ваги. Алгоритм широко
застосовується в програмуванні і технологіях,
наприклад, його використовують протоколи
маршрутизації OSPF і IS-IS.
40 КНУБА, ФАІТ, 2018
41. Алгоритм Дейкстри
КНУБА, ФАІТ, 201841
Дан зважений орієнтований граф без дуг негативного ваги. Знайти
найкоротші шляхи від деякої вершини графа до всіх інших вершин
цього графа.
Кожній вершині з V зіставимо мітку - мінімальна відома відстань від
цієї вершини до a. Алгоритм працює покроково - на кожному кроці
він «відвідує» одну вершину і намагається зменшувати мітки. Робота
алгоритму завершується, коли всі вершини відвідані.
Ініціалізація. Мітка самої вершини a покладається рівною 0, мітки
інших вершин - нескінченності. Це відображає те, що відстані від a до
інших вершин поки невідомі. Всі вершини графа позначаються як
невідвідані.
Крок алгоритму. Якщо всі вершини відвідані, алгоритм завершується.
В іншому випадку, з ще не відвіданих вершин вибирається вершина u,
що має мінімальну позначку. Ми розглядаємо різні маршрути, в яких
u є передостаннім пунктом. Вершини, в які ведуть ребра з u, назвемо
сусідами цієї вершини. Для кожного сусіда вершини u, крім
позначених відвіданими, розглянемо нову довжину шляху, що
дорівнює сумі значень поточної мітки u і довжини ребра, що з'єднує u
з цим сусідом. Якщо отримане значення довжини менше значення
мітки сусіда, замінимо значення мітки отриманим значенням
довжини. Розглянувши всіх сусідів, відмітимо вершину u як відвідану
і повторимо крок алгоритму.
45. Алгоритм хвильового трасування
хвильовий алгоритм, алгоритм Лі
алгоритм пошуку шляху, алгоритм пошуку
найкоротшого шляху на планарному графі.
Належить до алгоритмів, заснованих на методах
пошуку в ширину.
45 КНУБА, ФАІТ, 2018