Алгоритм пошуку у глибину
Задача побудови якого-небудь (одного) остовного дерева у графі належить до числа найважливіших для практики і, на щастя, є найпростішою для алгоритмізації і комп’ютерної реалізації. Зрозуміло, що основна ідея побудови повинна полягати у послідовному відборі ребер, що не утворюють цикли з попередніми.
Наведемо так званий алгоритм «пошуку у глибину», що переглядає по одному разу всі ребра графа G і звичайно всі його вершини. Зауважимо, що пошук у глибину (скорочено ПГ) – не єдиний метод перегляду всіх вершин і ребер графаG . Наприклад, часто використовується перегляд графа «пошуком у ширину», при якому у кожній черговій вершині переглядаються всі інцидентні їй ребра без виключення і всі їх кінцеві вершини (тобто «оточення» вершин X).
Якісний опис алгоритму пошуку в глибину
В процессі пошуку в глибину вершинам графа G послідовно привласнюються нові номери (ПГ-номери) від 1 до n, а ребра одержують позначки двох класів: «пряме ребро» і «зворотне ребро». Пошук починається з довільної вершини , якій привласнюється ПГ-номер 1: ПГ. Далі обирається будь-яке інцидентне до ребро позначається позначкою «пряме ребро» і вершині привласнюється ПГ-номер 2. Наступний (третій) крок пошуку починається у вершині , в якій ПГ, і підкоряється рекурентній процедурі, яку ми опишемо для довільного кроку . Припустимо, -й крок віконаний і деяка вершина одержала ПГ-номер ПГ.
Можливі дві ситуації:
1. У вершині існує інцидентне непозначене ребро . Якщо вершина вже має ПГ-номер, то ребро одержує позначку «зворотне», і продовжується пошук непозначеного ребра, що інцидентне вершині . Якщо ж вершина не має раніше привласненого ПГ-номеру, то їй провласнюється черговий ПГ-номер ПГ, ребро одержує позначку «пряме», і пошук переміщується у вершину .
2. Всі ребра, що інцидентні вершині , позначені на попередніх кроках. Тоді пошук повертається у вершину , що має попередній ПГ-номер ПГ.
Пошук у глибину закінчується, коли всі ребра графа виявляються позначеними.
Позначимо множина прямих ребер, множина зворотних ребер. Із процедури пошуку в глибину виходить твердження.
Твердження.Якщо – зв’язний граф, то підграф є остовне дерево в G , а підграф є додатковим до дереваT . А дерево T є орієнтованим кореневим з коренем .
Приклад.Розглянемонаступный граф.
Тому що , то кількість ребер у повинна дорівнювати .
Крок 1.Нехай , .
Крок 2., обираємо інцідентне ребро , , , ребро – пряме.
Крок 3., інцідентне непозначене ребро . , не має ПГ-позначки, отже , ребро – пряме, , .
Крок 4., інцідентне непозначене ребро . , не має ПГ-позначки, отже , ребро – пряме, , .
Крок 5., інцідентне непозначене ребро . , не має ПГ-позначки, отже , ребро – пряме, , .
Крок 6., –непозначене ребро. , має ПГ-номер, отже ребро –зворотнє. –непозначене ребро. , має ПГ-номер, отже ребро –зворотнє. не має непозначених ребер, .
Крок 7., не має непозначених ребер, .
Крок 8. , –непозначене ребро. , не має ПГ-позначки, отже , ребро – пряме, , алгоритм завершено.
–остовне дерево (кістяк) графу.
5. Задача про мінімальне з'єднання
Теорема Келі становить інтерес у зв'язку з наступною практичною задачею.
Нехай для деякої множини міст відома вартість будівлі дороги між будь-якими двома містами . Яка повинна бути мережа доріг між містами, що входять в , щоб по ній можна було проїхати з будь-якого міста в будь-яке місто й щоб вартість цієї мережі було мінімальною?
Аналогічні задачі виникають при проектуванні мереж зв'язку, електричних і трубопровідних мереж і т.п. задачі цього роду називають задачами про мінімальне з'єднання.
Мовою теорії графів задача про мінімальне з'єднання формулюється в такий спосіб. Нехай – зв'язний граф, кожному ребру якого приписується деяка міра (довжина, вага, вартість і т.п.), потрібно знайти зв'язний остовний підграф графа з мінімальною мірою . Очевидно, що повинен бути деревом: якбимістив цикл, то можна було б зменшити , видаливши одне з його ребер.
Як показує теорема Келі, рішення цієї задачі простим перебором вимагає надзвичайно більших обчислень навіть при невеликому числі вершин (при , існує дерев). Однак для її рішення є наступний ефективний алгоритм, запропонований чеським математиком Борувкой.
Крок 1. Вибирається ребро з найменшою мірою. Позначимо через остовний підграф .
Крок -й, . Нехай на -м кроці побудований остовний підграф ,який не містить циклів й містить компонент зв’язності. Тоді , . Якщо , то ; по теоремі 4 до графа можна приєднати ребро так, щоб отриманий граф не містив циклів (тому що цикломатичне число при цьому не збільшується).
На кроці ми будуємо граф , вибираючи так, щоб міра була мінімальною. Якщо таких ребер декілька, то вибираємо в якості будь-яке з них. Якщо ж , те, і граф є деревом. Це дерево називають звичайно економічним.
Твердження. Міра економічного дерева мінімальна.
Доказ. Допустимо, що наше припущення невірно. Нехай , відмінне від дерево мінімальної міри , що є кістяком графа ; – ребро з найменшим номером з , що не втримується в. Серед таких дерев виберемо те, у якому число максимально.
У дереві найдеться ланцюг , що з'єднує й (див. мал. 4.30);
Рис. 4.30
у ньому ребра графа намальовані суцільними лініями, ребра – пунктирними. Разом з вона утворить цикл, що містить хоча б одне ребро , що не належить (дерево не містить циклів). Приєднавши до ребро й видаливши , одержимо нове дерево , що також містить всі вершини графа .
За умовою, і, отже, . З іншого боку, ребро не утворить із ребрами циклу, тому що всі вони входять у дерево . Якби, то при побудові дерева треба було б використати ребро , а не . Отже, . Отже, дерево має мінімальну міру й містить ребра . Це суперечить вибору дерева . Таким чином, економічне дерево має мінімальну міру.