1. Деякі означення теорії графів Def. Граф (graph) G= (V , E ) – це сукупність двох множин: основної множини V (вершини, vertex) та множини E (ребра, edge), елементами якої є двох- елементні підмножини елементів множини V . Вершини зображають точками або кружками, а ребра – лініями, що поєдну- ють дві вершини. Як і будь-які інші множини, множини V та E вважаються неупорядкованими, а їхні елементи – різними. Це буде простий граф. Ми самі нумеруємо вершини, ребра, та вершини в ребрі там, як нам зручно. Будемо позначати вершини v1 , v 2 , … , v n, а ребра e 1 , e 2 ,… , e m. Кількість вершин n – це розмір графа (order), а кількість ребер m – потужність (size) графа. Узагальнення простого графа: мультиграф (multigraph, можливі кратні ребра); псевдограф (pseudograph, можливі кратні ребра та петлі); гіперграф (hypergraph, можливі гіперребра, що поєднують більше двох вершин). Def. Вершина vi називається інцидентною (incident) до ребра e k , якщо вона є одним із його кінців. Def. Вершини vi та v j називаються суміжними (adjacent), якщо в графі є ребро, інцидентне до цих вершин. Def. Ребра e k та e l називаються суміжними (adjacent), якщо в графі є вершина, інцидентна до цих ребер. Def. Граф та його узагальнення називається графом зі зваженими (weighted) вершинами (ребрами), якщо існує відображення множини V (або E ) на множину дійсних чисел. Тобто якщо кожній вершині (кожному ребру) поставлене у відповідність дійсне число. Якщо ці числа натуральні, то можна взяти набір фарб, перенумерувати їх, і сказати, що граф має пофарбовані (colored) вершини та (або) ребра. Def. Шлях (path) у графі – це послідовність veveve … vev , де сусідні елементи інцидентні. Шлях називається простим (simple), якщо всі проміжні вершини в ньому різні. Вочевидь, у простому шляху всі ребра теж будуть різними. Def. Цикл (cycle) у графі – це шлях, у якого перша та остання вершини співпадають. Цикл називається простим, якщо всі проміжні вершини в ньому різні. Вочевидь, у простому циклі всі ребра теж будуть різними. З непростого шляху завжди можна виділити принаймні один простий цикл. З непростого циклу можна виділити принаймні два простих цикли. Def. Граф називається зв'язним (connected), якщо в ньому існує шлях з кож- ної вершини в кожну. У незв'язному графі є окремі компоненти зв'язності. Крайній випадок – граф без ребер або пустий (empty) граф, позначається On, буде мати n компонент зв'язності.
2. Мінімальне остовне дерево
Нехай G – зв'язний граф. Будемо видаляти з нього ребра так, щоб він зали- шився зв'язним. При цьому мінімальна кількість ребер, яка повинна залишитися для зв'язності графа з n вершинами, буде дорівнювати n −1. Def. Остовним деревом (spanning tree) називається зв'язний граф з m=n− 1. Це означення еквівалентно двом іншим. Def. Остовним деревом називається зв'язний граф без циклів. Def. Остовним деревом називається зв'язний граф, у якого існує лише один шлях з кожної вершини в кожну іншу. Def. Нехай у зв'язному графі ребра зважені. Мінімальним остовним деревом (МОД, minimum spanning tree) називається остовне дерево з мінімальною за- гальною (сумарною) вагою ребер у ньому. Наприклад, якщо всі ребра зв'язного графа мають однакову одиничну вагу, то будь-яке остовне дерево буде міні- мальним, і вага кожного з них буде дорівнювати n −1. Це – тривіальний випадок. Для побудови МОД можна застосувати жадібний алгоритм (greedy algorithm). Дві його найпоширеніші реалізації – це алгоритми Пріма (Prim) та Краскала (Kruskal). Кроки алгоритму Пріма показані на рис. 1. Біля вершин проставлені їхні номери, а біля ребер – ваги. У нашому графі n=9 ;m=16, тому в побудованому МОД повинно залишитися лише 8 ребер з 16. Остовне дерево повинно поєдну- вати всі вершини, у т.ч. й v1 . Тому візьмемо перше ребро мінімальної ваги, що виходить з вершини v1. Таким ребром буде e 1 ,2: його вага 2 менша за вагу 3 ребра e 1 ,4 . Отже, починаємо побудову МОД з нього (а). Далі переглядаємо всі ребра, суміжні до вже побудованого фрагменту МОД, тобто до e 1 ,2. Всього таких ребер 4 (одне у вершині v1 та три у v 2). Обираємо з них ребро мінімальної ваги. Мінімальна вага серед цих чотирьох ребер – 1, вона у ребра e 2 ,4 . Його й приєднуємо до МОД, що будується (б). Продовжуємо переглядати ребра, суміжні до вже побудованого дерева (фрагменту МОД) i такі, що не утворюють у ньому циклів. Беремо всі ребра, інцидентні до v1, v 2 та v 4 (крім e 1 ,4 – його брати не можна, бо утворюється цикл), та обираємо з них ребро мінімальної ваги. Мінімальна вага 2 – у ребра e 2 ,5, його й приєднуємо (в). Продовжуємо процес. Тепер у нас з'явилась можливість долучити до МОД ребро e 5 ,6 вагою 1 (г), а потім – e 6 ,9 теж з вагою 1 (д). Серед ребер, що залишилися, мінімальна вага 2 – у ребра e 5 ,8, його також можна долучити до МОД (е). І, нарешті, приєднуємо ребра e 3 ,6 та e 4 , 7 ваги 3 (є, ж). Отримали 8 ребер – МОД побудоване. Його вага 15. Рис.1. Алгоритм Пріма Рис. 2. Алгоритм Краскала Алгоритм Краскала показаний на рис. 2. Основна його відмінність від алгоритму Пріма – ми будемо додавати в МОД, що будується, не обов'язково суміжні ребра. Головне, щоб не утворювалися цикли. Переглядаємо всі ребра мінімальної ваги 1. Починаємо з e 2 ,4 – воно зустрілося першим (а). Наступне ребро ваги 1 – це e 5 ,6, i воно не утворює циклів – додаємо його (б). Далі переві- ряємо e 6 ,9 : циклів немає, долучаємо його (в). Всi ребра з вагою 1 вичерпані. Переходимо до ребер з наступною мінімальною вагою 2. Ребро e 1 ,2 можна при- єднати (г), e 2 ,5 – також (д), e 5 ,8 теж підходить (е). Далі – ребра з вагою 3. Ребро e 1 ,4 не годиться (утворюється цикл), а ось e 3 ,6 підходить (є), i e 4 , 7 – також (ж). В результаті отримали те же саме МОД ваги 15, що й за алгоритмом Пріма.
3. Приклад для розв'язання в аудиторії
Рис. 3. Приклад для розв'язання в аудиторії
На рис. 3 показаний граф з n=10; m=20 зі зваженими ребрами. Ваги ребер
позначені цифрами біля відповідного ребра. Наприклад, запис w 1=7 означає, що вага ребра номер 1 дорівнює 7. Треба знайти МОД за допомогою алгоритму Краскала. Оскільки вага всіх ребер різна, розв'язок буде єдиним. Для графа з рис. 3 включаємо в МОД ребра з номерами (у порядку зростання їхніх ваг): 7, 18, 15, 11, 19, 12, 1, 2, 16. Його загальна вага: w=w7 +w 18+ w15+ w11 +w 19+ w12+ w1 + w2 +w16 = =1+2+3+ 4+ 5+6+7+ 9+14=51. У відповіді є дві частини:
Частина 1. Обрати правильний варіант додавання ребер з 8 запропонованих: