Глава 9
Алгоритми побудови остового (покриваючого) дерева мережі
Деревовидна структура характеризується наступними властивостями. 1) існує єдиний елемент, або вузол, на який не посилається ніякий інший елемент і який називається коренем; 2) починаючи з кореня і слідуючи за певною ланцюжку покажчиків, що містяться в елементах, можна здійснити доступ до будь-якого елемента структури; 3) на кожен елемент, крім кореня, є єдина посилання, тобто кожен елемент адресується єдиним показником. Вузол, який знаходиться безпосередньо під вузлом х, називається безпосереднім нащадком х; якщо х знаходиться на рівні м, то говорять, що розташований на рівні р 4-1. Навпаки, вузол х називається безпосереднім предком у. Вважається, що корінь дерева розташований на рівні 1. Максимальний рівень будь-якого елемента дерева називається його глибиною або висотою. Кількість безпосередніх нащадків внутрішнього вузла називається його ступенем. Максимальна ступінь всіх вузлів є ступінь дерева. Число гілок, або ребер, які потрібно пройти, щоб просунутися від кореня до певного вузла х, називається довжиною шляху до х. Корінь має довжину шляху 1, його безпосередні нащадки - довжину шляху 2 і т.д. Взагалі, вузол на рівні р має довжину шляху р. Довжина шляху дерева визначається як сума довжин шляхів всіх його вузлів. Вона також називається довжиною внутрішнього шляху. Якщо елемент не має нащадків, він називається термінальним елементом, або листом, а елемент, який не є кінцевим, називається внутрішнім вузлом (мал. 9.1).
Припустимо, що необхідно прийняти рішення, пов'язане з організацією мережі комп'ютерів в різних територіальних пунктах. Це рішення є досить складним і залежить від великої кількості факторів, які включають обчислювальні ресурси, доступні в кожному пункті, відповідні рівні потреб, пікові навантаження на систему, можливе неефективне використання основного ресурсу в системі і, крім того, вартість пропонованої мережі. У цю вартість входить: придбання обладнання; прокладання ліній зв'язку; обслуговування системи і т.д. Необхідно визначити вартість такої мережі. Неважко бачити, що сформульована тут завдання має багато інших аналогів. Наприклад, потрібно з ’ єднати декілька населених пунктів лініями телефонного зв'язку таким чином, щоб усі ці пункти були пов'язані в мережу і щоб вартість прокладки комунікацій була мінімальною. Замість телефонних ліній можна говорити про прокладання водопровідних комунікацій, про будівництво доріг і т.д. Рішення подібних задач можливо з використанням теорії графів (мереж). Нехай G = (V,Е) - зв'язний не орієнтований граф, що містить цикли, тобто замкнуті маршрути, де V - множина вершин, а Е - безліч ребер. Остовним (покриваючим) деревом називається підграф, що не містить циклів, що включає всі вершини вихідного графа, для якого сума ваг ребер мінімальна (мал. 9.2).
Цикломатичне число γ показує, скільки ребер на графі потрібно видалити, щоб у ньому не залишилося жодного циклу: γ = n - m+1, де n - кількість ребер; m – кількість вершин. Наприклад, для графа, зображений на рис. 9.2, цикломатичне число дорівнює γ = n-m + 1 = 8 - 5 + 1 = 4. Це означає, що якщо на графі прибрати чотири ребра, то в ньому не залишиться жодного циклу, а сумарна вага ребер буде дорівнює γ. Для побудови кістяка дерева графа використовуються алгоритми Крускала і Прима.
9.1.
Метод Крускала
На рис. 9.3 показана схема алгоритма Крускала.
Рис.
9.3. Схема алгоритма Крускала
Д
ля
побудови кістяка зв'язкового дерева
мінімальної ваги використовується
алгоритм Крускала.
Крок
1. Спочатку кожна вершина вихідного
графа поміщається в одноэлементное
підмножина, де всі вершини ізольовані.
Крок
2. Ребра сортуються за збільшенням ваги.
Крок 3. Ребро включається в остовне дерево, якщо воно пов'язує вершини, що належать різним безлічей. Крок 4. Алгоритм закінчує роботу, коли всі вершини об'єднуються в одне безліч, при цьому решта ребра не включаються до остовне дерево. Розглянемо реалізацію цього алгоритму на прикладі побудови кістяка дерева мінімальної ваги для графа G (табл. 9.1).
Приклад 2. Нехай дана схема мікрорайону. Необхідно з'єднати будинку телефонним кабелем таким чином, щоб його довжина була мінімальною. Схему мікрорайону представимо зваженим графом (мал. 9.5).
В
изначимо
цикломатичне число графа γ = n - m+ 1 = 10 - 6
+ 1 = 5, тобто на графі необхідно видалити
п'ять ребер.
Спочатку
кожна вершина вихідного графа поміщається
в одноэлементное підмножина, вважаємо,
що всі вершини ізольовані, тобто не
пов'язані (табл. 9.2).
Ребро включається в остовне дерево, якщо воно пов'язує вершини, що належать різним подмножествам, при цьому вершини об'єднуються в нове підмножина. В таблицю послідовно включаються ребра в порядку зростання їх ваги. Ребро (V2,V3) пов'язує дві вершини, що належать різним подмножествам {V2} і {Vз}. Тому ребро включається в остовне дерево, а вершини об'єднуються в одне підмножина Ребро (V4, V6) також пов'язує вершини з різних підмножин, воно включається в остовне дерево, а вершини утворюють підмножина{v4,v6}. Вершини V2 і V4 знаходяться в одному підмножині, тому ребро (V2, V4) виключається З розгляду. Алгоритм закінчує роботу, коли всі вершини об'єднуються в одне безліч, при цьому решта ребра не включаються до остовне дерево. Послідовно переглядаючи таблицю, отримаємо схему з'єднання телефонним кабелем будинків у мікрорайоні (мал. 9.6).
В
изначимо
дипломатичне число графа:
γ
= n - m+1 = 8 - 5+1= 4.
Це
означає, що на графі потрібно видалити
чотири ребра. Рішення показано в табл.
9.3.
Чотири ребра виключаються з розгляду. У результаті отримаємо остовне дерево мінімальної ваги (мал. 9.8).
Проведене дослідження методу Крускала показало ефективність його використання для побудови кістяка дерева мінімальної ваги зваженого неорієнтованого графа (мережі). Даний метод дозволяє обробляти сильно зв'язні графи з великим числом вершин, що необхідно в практиці розробки і створення ефективних алгоритмів рішення на ПЕОМ широкого класу задач.
9.2.
Метод Прима
У методі Прима від вихідного графа переходимо до його представлення у вигляді матриці едомської. На графі вибирається довільна вершина. Обрана вершина утворює початковий фрагмент кістяка дерева. Потім аналізуються ваги ребер від обраної вершини до решти необраних вершин. Вибирається мінімальна ребро, яке вказує на наступну обрану вершину, і т.д. Процес продовжується до тих пір, поки в остовне дерево не будуть включені всі вершини вихідного графа. Етапи роботи алгоритму Прима показані на мал. 9.9
Приклад 1. Нехай дана схема комп'ютерної мережі (мал. 9.10). Необхідно з'єднати комп'ютери таким чином, щоб довжина проводки була мінімальною.
Визначимо цикломатичне число графа: γ=n - m+1=8 - 5 + 1 = 4. Рішення показано в табл. 9.4.
При перегляді рядки таблиці. 9.4 знаходимо мінімальну величину ваги ребра, виділяємо її, і більше стовпець, в якому знаходиться ця величина, у розгляді не бере участь. Для побудови кістяка дерева необхідно переглянути стовпці таблиці знизу вгору і зафіксувати перша поява мінімальної величини. У результаті отримаємо остовне дерево мінімальної ваги (мал. 9.11).
Приклад 2. Побудувати остовне дерево мінімальної ваги для графа, показаного на мал. 9.12.
У
табл. 9.5 в дужках зазначено вибрані
мінімальні елементи. Потім у кожному
стовпці фіксуються перші появи мінімальних
елементів (відпрацювання тому), при
цьому у шукане остовне дерево мінімальної
ваги увійдуть ребра(2,7), (3,7), (4,3), (5,4), (6,1)
і (7,1). Порядок стовпчиків перегляду
робочої таблиці байдужий; важливо, щоб
ні один стовпчик не був пропущений.
Отримане в результаті виконання алгоритму
остовне дерево зображено на рис. 9.13.
У
остовне дерево повинні увійти всі
вершини вихідного графа, звідси випливає,
що в якості початкової вершини (тобто
першої обраної рядка) може бути обрана
будь-яка вершина графа. У табл. 9.5 в якості
початкової взята вершина 1.
Рис.
9.13.
Остовное дерево минимального веса
У табл. 9.6 показані кроки виконання методу Прима. Перегляд стовпчиків табл. 9.6 знизу вгору дозволяє визначити ребра, включені в остовне дерево мининального ваги (мал. 9.15). Контрольні питання 1. Що розуміється під остовним деревом? 2. Як визначається довжина внутрішнього шляху? 3. Що таке термінальний елемент? 4. Введіть формулу для обчислення цикломатичного числа. 5. Які особливості методів Крускапа і Прима? 6. Які критерії завершення роботи методів Крускапа і Прима? 7. У чому полягає методика аналізу складності алгоритмів побудови кістяка дерева графа?
