- Алгоритм Борувки
-
Алгори́тм Бору́вки — это алгоритм нахождения минимального остовного дерева в графе.
Впервые был опубликован в 1926 году Отакаром Борувкой в качестве метода нахождения оптимальной электрической сети в Моравии. Несколько раз был переоткрыт, например Флореком, Перкалом и Соллином. Последний, кроме того, был единственным западным ученым из этого списка, и поэтому алгоритм часто называют алгоритмом Соллина, особенно в литературе по параллельным вычислениям.
Содержание
Алгоритм
Работа алгоритма состоит из нескольких итераций, каждая из которых состоит в последовательном добавлении рёбер к остовному лесу графа, до тех пор, пока лес не превратится в дерево, то есть, лес, состоящий из одной компоненты связности.
В псевдокоде, алгоритм можно описать так:
- Изначально, пусть
— пустое множество ребер (представляющее собой остовный лес, в который каждая вершина входит в качестве отдельного дерева).
- Пока
не является деревом (что эквивалентно условию: пока число рёбер в
меньше, чем
, где
— число вершин в графе):
- Для каждой компоненты связности (то есть, дерева в остовном лесе) в подграфе с рёбрами
, найдём самое дешёвое ребро, связывающее эту компоненту с некоторой другой компонентой связности. (Предполагается, что веса рёбер различны, или как-то дополнительно упорядочены так, чтобы всегда можно было найти единственное ребро с минимальным весом).
- Добавим все найденные рёбра в множество
.
- Для каждой компоненты связности (то есть, дерева в остовном лесе) в подграфе с рёбрами
- Полученное множество рёбер
является минимальным остовным деревом входного графа.
Сложность алгоритма
На каждой итерации число деревьев в остовном лесу уменьшается по крайней мере в два раза, поэтому всего алгоритм совершает не более
итераций. Каждая итерация может быть реализована со сложностью
, поэтому общее время работы алгоритмы составляет
времени (здесь
и
— число вершин и рёбер в графе, соответственно).
Однако для некоторых видов графов, в частности, планарных, оно может быть уменьшено до
.[1] Существует также рандомизированный алгоритм построения минимального остовного дерева, основанный на алгоритме Борувки, работающий в среднем за линейное время.
См. также
Литература
- Седжвик Р. Фундаментальные алгоритмы на C++, часть 5. Алгоритмы на графах. ISBN 5-93772-082-2.
Примечания
- ↑ Eppstein, David (1999), "Spanning trees and spanners", in Sack, J.-R. & Urrutia, J., «Handbook of Computational Geometry», Elsevier, сс. 425–461; Mareš, Martin (2004), "«Two linear time algorithms for MST on minor closed graph classes»", Archivum mathematicum Т. 40 (3): 315–320, <http://www.emis.de/journals/AM/04-3/am1139.pdf>.
Категория:- Алгоритмы на графах
- Изначально, пусть
Wikimedia Foundation. 2010.