6.7: Остовні дерева
Компанія вимагає надійного підключення до Інтернету та телефону між п'ятьма офісами (названими A, B, C, D та E для простоти) у Нью-Йорку, тому вони вирішують орендувати виділені лінії від телефонної компанії. Телефонна компанія стягуватиме плату за кожне зроблене посилання. Витрати, в тисячах доларів на рік, наведені на графіку.
У цьому випадку нам не потрібно знаходити схему або навіть конкретний шлях; все, що нам потрібно зробити, це переконатися, що ми можемо зателефонувати з будь-якого офісу в будь-який інший. Іншими словами, ми повинні бути впевнені, що є шлях від будь-якої вершини до будь-якої іншої вершини.
Остовне дерево - це зв'язаний граф, який використовує всі вершини, в яких відсутні схеми.
Іншими словами, існує шлях від будь-якої вершини до будь-якої іншої вершини, але ніяких ланцюгів.
Деякі приклади остовних дерев наведені нижче. Зверніть увагу, що в деревах немає ланцюгів, і це добре, щоб мати вершини з ступенем вище двох.
Зазвичай у нас є початковий графік для роботи, як у прикладі телефону вище. У цьому випадку ми формуємо наше остовне дерево, знаходячи підграф — новий граф, сформований з використанням усіх вершин, але лише деяких ребер з початкового графа. Жодні ребра не створюватимуться там, де вони ще не існували.
Звичайно, будь-яке випадкове остовне дерево насправді не те, що ми хочемо. Ми хочемо мінімальну вартість охоплюючого дерева (MCST).
Мінімальна вартість остовного дерева - це остовне дерево з найменшою загальною вагою краю.
Найближчий сусідський стиль підхід не має стільки сенсу тут, оскільки нам не потрібна схема, тому замість цього ми будемо приймати підхід, подібний до відсортованих країв.
- Виберіть найдешевшу невикористану ребро на графіку.
- Повторіть крок 1, додавши найдешевший невикористаний край, якщо тільки:
- додавання краю створить схему
- Повторюйте, поки не утвориться остовне дерево
Використовуючи наш графік телефонної лінії зверху, почніть додавати ребра:
\ (\ begin {масив} {lll}\ mathrm {AB} &\ $4 &\\ mathrm {OK}\\ mathrm {AE} &\ $5 &\ mathrm {OK}
\\ текст {BE} &\ $\ текст {6} &\ текст {відхили-замикає ланцюг ABEA}\\ текст {DC} &\ $7 &\ текст {OK}\\ текст {AC} &\ $8 &\ text {OK}\ end {масив}\)
На цьому етапі ми зупиняємося — кожна вершина тепер з'єднана, тому ми сформували остовне дерево вартістю 24 тисячі доларів на рік.
Примітно, що алгоритм Крускала є оптимальним і ефективним; ми гарантовано завжди створюємо оптимальний MCST.
Енергетичній компанії необхідно прокласти оновлені розподільні лінії, що з'єднують десять міст Орегону нижче до електромережі. Як вони можуть мінімізувати кількість нової лінії, яку потрібно прокласти?
\ (\ begin {масив} {|c|c|c|c|c|c|c|c|c|c|c|c|}
\ hline & & & & & & & &\\
text {Ешленд} &\ текст {Асторія} &\ текст {Вигин} &\ текст {Корвалліс} &\ текст {Озеро Кратер} &\ текст {Євген}\ текст {Ньюпорт} amp;\ текст {Портленд} &\ текст {Салем} &\ текст {Приморський}\
\ hline\ текст {Ешленд} &\ _ & 374 & 200 & 223 & 108 & 252 & 285 & 240 & 356\
\ hline\ текст {Асторія} & 374 &\ _ & 255 & 166 & 433 & 199 & 135 & 95 & 136 & 17\\
\ hline\ текст {згин} & 200 & 255 &\ _ & 128 & 277 & 128 & 180 & 131 & 247\ 247\
\ hline\ текст {Корвалліс} & 223 & 166 & 128 &\ _ & 430 & 47 & 52 & 84 & 40 & 155\
\ hline\ текст {Озеро Кратер} & 108 & 433 & 277 & 430 &\ _ & 453 & 478 & 344 & 423\\ hline
\ текст {Євген} & 178 & 199 & 128 & 47 & 453 & 91 & 110 & 64 & 181\\
\ hline\ текст {Ньюпорт} & 252 & 135 & 180 & 52 & 478 & 91 &\ _ & 114 & 83 & 117
\\\ hline\ текст {Портленд} & 285 & 95 & 160 & 84 & 110 & 114 &\ _ & 47 & 78\\
\ hline\ текст {Салем} & 240 & 136 & 131 & 40 & 389 & 64 & 83 & 47 &\ _ & 118\\
\ hline\ текст {Приморський} & 356 & 17 & 247 & 155 & 423 & 181 & 117 & 78 & 118 &\ _\\
\\ hline
\ кінець {масив}\)
Рішення
Використовуючи алгоритм Kruskal, ми додаємо ребра від найдешевших до найдорожчих, відкидаючи всі, що закривають ланцюг. Зупиняємося при підключенні графіка.
Seaside to Astoria17 milesCorvallis to Salem40 milesPortland to Salem47 milesCorvallis to Eugene47 milesCorvallis to Newport52 milesSalem to Eugenereject – closes circuitPortland to Seaside78 miles
Графік до цієї точки показаний праворуч.
Продовжуючи,
Newport to SalemrejectCorvallis to PortlandrejectEugene to NewportrejectPortland to AstoriarejectAshland to Crater Lk108 milesEugene to PortlandrejectNewport to PortlandrejectNewport to SeasiderejectSalem to SeasiderejectBend to Eugene128 milesBend to SalemrejectAstoria to NewportrejectSalem to AstoriarejectCorvallis to SeasiderejectPortland to BendrejectAstoria to CorvallisrejectEugene to Ashland178 miles
Це пов'язує графік. Загальна довжина кабелю для прокладки становила б 695 миль.
Знайдіть мінімальну вартість охоплюючого дерева на графіку нижче за допомогою алгоритму Kruskal.
- Відповідь
-
AB: Додати, вартість 11
БГ: Додати, вартість 13
AE: Додати, вартість 14
А.Г.: Пропустити, створив би схему ABGA
EF: Додати, вартість 16
EC: Додати, вартість 17
На цьому остовне дерево закінчено.