Алгоритм Борувки — различия между версиями
(→Доказательство корректности) |
(→Доказательство корректности) |
||
Строка 15: | Строка 15: | ||
{{Лемма | {{Лемма | ||
|id=lemma1 | |id=lemma1 | ||
− | |statement= | + | | |
+ | |statement=Рассмотрим связный неориентированный взвешенный граф <tex> G = (V, E) </tex> с весовой функцией <tex>w : E \to \mathbb{R}</tex>. | ||
+ | Тогда после выполнения первой итерации алгоритма Борувки | ||
+ | |about= Утверждаем что после первой итерации алгоритма Борувки, получившееся множество ребер можно достроить до MST. | ||
|proof=доказательство (необязательно) | |proof=доказательство (необязательно) | ||
}} | }} |
Версия 17:47, 15 декабря 2012
Алгоритм Борувки — алгоритм поиска минимального остовного дерева (minimum spanning tree, MST) во взвешенном неориентированном связном графе. Впервые был опубликован в 1926 году Отакаром Борувкой.
Содержание
Описание алгоритма
Пусть
подграф графа . Изначально содердит все вершины из и не содержит ребер.Будем добавлять в
ребра следующим образом:Пока
не является деревом- Для каждой компоненты связанности находим минимальное по весу ребро, которое связывает вершину из данной компоненты с вершиной, не принадлежащей данной компоненте.
- Добавим в все ребра, которые хотя бы для одной компоненты оказались минимальными.
Получившийся граф
является минимальным остовным деревом графа .Доказательство корректности
Лемма (Утверждаем что после первой итерации алгоритма Борувки, получившееся множество ребер можно достроить до MST.): |
Рассмотрим связный неориентированный взвешенный граф с весовой функцией .
Тогда после выполнения первой итерации алгоритма Борувки |
Доказательство: |
доказательство (необязательно) |
Реализация
Graph Boruvka(Graph G) while T.size < n init() // у вершины есть поле comp(компонента которой принадлежит вершина) findComp(T) // разбиваеv граф T на компоненты связынности обычным dfs-ом for uvE 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 Comp // Comp — множество компонент связанности в T T.addEdge(minEdge[k]) return T; |
Асимптотика
Время работы внутри главного цикла будет равно
.Количество итераций которое выполняется главным циклом равно
так как на каждой итерации количество компонент связанности уменьшается в 2 раза (изначально количество компонент равно , в итоге должна стать одна компонента).Общее время работы алгоритма получается
Литература
- Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)