Алгоритм Борувки — це алгоритм пошуку мінімального кістякового дерева в графі.
Історія
Вперше опубліковано 1926 року Отакаром Борувкою як метод пошуку оптимальної електричної мережі в Моравії. Алгоритм кілька разів було перевідкрито, зокрема Флореком, Перкалєм та Солліном. Останній був єдиним західним ученим з цього переліку, тому алгоритм часто називають алгоритмом Солліна, особливо в літературі з паралельних обчислень.
Алгоритм
Робота алгоритму складається з декількох ітерацій, кожна з яких полягає в послідовному додаванні (ребер) до графу, доки (ліс) не перетвориться на дерево, (тобто, ліс, що складається з однієї компоненти зв'язності).
У псевдокоді, алгоритм можна записати так:
- Нехай спочатку T — порожня множина ребер (являє собою ліс, до якого кожна вершина входить як окреме дерево).
- Поки T не є деревом (що еквівалентно умові: кількість ребер у T менше, ніж V — 1, де V — кількість вершин у графі):
- Для кожної компоненти зв'язності (тобто, дерева в кістяковому лісі) у з ребрами T, знайдемо найдешевше ребро, що пов'язує цю компоненту з будь-якою іншою компонентою зв'язності. Вважаємо, що вага ребер різна, або якось додатково впорядкована так, що завжди можна знайти єдине ребро з мінімальною вагою.
- Додамо знайдені ребра до множини T.
- Отримана множина ребер T є мінімальним кістяковим деревом початкового графу.
Приклад коду:
Graph Boruvka(Graph G) while T.size < n - 1 init() // для кожної компоненти зв'язності вага мінімального ребра = Inf findComp(T) // розбиваємо граф T на компоненти зв'язності звичайним dfs-ом for uv \in E if u.comp != v.comp if minEdge[u.comp].w < uv.w minEdge[u.comp] = uv if minEdge[v.comp].w < uv.w minEdge[v.comp] = uv for k \in Component // Component — множина компонент зв'язності в T T.addEdge(minEdge[k]) // додаємо ребро, якщо його не було в T return T;
Складність алгоритму
Під час кожної ітерації (за винятком, можливо, останньої) кількість дерев у зменшується вдвічі, тому алгоритм зробить не більше, ніж ітерацій. Кожна ітерація може бути реалізована зі складністю , тому загальний час роботи алгоритми становить (V та E — відповідно кількість вершин та ребер у графі).
Для деяких видів графів, зокрема, планарних, час може бути скорочено до . Існує також рандомізований алгоритм побудови мінімального кістякового дерева, заснований на алгоритмі Борувки, що працює в середньому за лінійний час.
Див. також
Посилання
- Eppstein, David (1999). Spanning trees and spanners. У Sack, J.-R.; Urrutia, J. (ред.). Handbook of Computational Geometry. Elsevier. с. 425—461.
- Mareš, Martin (2004). (PDF). Т. 40, № 3. с. 315—320. Архів оригіналу (PDF) за 9 травня 2009. Процитовано 22 січня 2011.
{{}}
: Проігноровано|journal=
()
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm Boruvki ce algoritm poshuku minimalnogo kistyakovogo dereva v grafi IstoriyaVpershe opublikovano 1926 roku Otakarom Boruvkoyu yak metod poshuku optimalnoyi elektrichnoyi merezhi v Moraviyi Algoritm kilka raziv bulo perevidkrito zokrema Florekom Perkalyem ta Sollinom Ostannij buv yedinim zahidnim uchenim z cogo pereliku tomu algoritm chasto nazivayut algoritmom Sollina osoblivo v literaturi z paralelnih obchislen AlgoritmRobota algoritmu skladayetsya z dekilkoh iteracij kozhna z yakih polyagaye v poslidovnomu dodavanni reber do grafu doki lis ne peretvoritsya na derevo tobto lis sho skladayetsya z odniyeyi komponenti zv yaznosti U psevdokodi algoritm mozhna zapisati tak Nehaj spochatku T porozhnya mnozhina reber yavlyaye soboyu lis do yakogo kozhna vershina vhodit yak okreme derevo Poki T ne ye derevom sho ekvivalentno umovi kilkist reber u T menshe nizh V 1 de V kilkist vershin u grafi Dlya kozhnoyi komponenti zv yaznosti tobto dereva v kistyakovomu lisi u z rebrami T znajdemo najdeshevshe rebro sho pov yazuye cyu komponentu z bud yakoyu inshoyu komponentoyu zv yaznosti Vvazhayemo sho vaga reber rizna abo yakos dodatkovo vporyadkovana tak sho zavzhdi mozhna znajti yedine rebro z minimalnoyu vagoyu Dodamo znajdeni rebra do mnozhini T Otrimana mnozhina reber T ye minimalnim kistyakovim derevom pochatkovogo grafu Priklad kodu Graph Boruvka Graph G while T size lt n 1 init dlya kozhnoyi komponenti zv yaznosti vaga minimalnogo rebra Inf findComp T rozbivayemo graf T na komponenti zv yaznosti zvichajnim dfs om for uv in E if u comp v comp if minEdge u comp w lt uv w minEdge u comp uv if minEdge v comp w lt uv w minEdge v comp uv for k in Component Component mnozhina komponent zv yaznosti v T T addEdge minEdge k dodayemo rebro yaksho jogo ne bulo v T return T Skladnist algoritmuPid chas kozhnoyi iteraciyi za vinyatkom mozhlivo ostannoyi kilkist derev u zmenshuyetsya vdvichi tomu algoritm zrobit ne bilshe nizh O log V displaystyle mathop O log V iteracij Kozhna iteraciya mozhe buti realizovana zi skladnistyu O E displaystyle mathop O E tomu zagalnij chas roboti algoritmi stanovit O Elog V displaystyle mathop O E log V V ta E vidpovidno kilkist vershin ta reber u grafi Dlya deyakih vidiv grafiv zokrema planarnih chas mozhe buti skorocheno do O E displaystyle mathop O E Isnuye takozh randomizovanij algoritm pobudovi minimalnogo kistyakovogo dereva zasnovanij na algoritmi Boruvki sho pracyuye v serednomu za linijnij chas Div takozhAlgoritm Kruskala Algoritm PrimaPosilannyaEppstein David 1999 Spanning trees and spanners U Sack J R Urrutia J red Handbook of Computational Geometry Elsevier s 425 461 Mares Martin 2004 PDF T 40 3 s 315 320 Arhiv originalu PDF za 9 travnya 2009 Procitovano 22 sichnya 2011 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite book title Shablon Cite book cite book a Proignorovano journal dovidka Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi