Алгоритм Борувки
Алгори́тм Бору́вки, алгоритм построения минимального остовного дерева во взвешенном связном неориентированном графе. Предложен в 1926 г. в работах чешского математика О. Борувки (Borûvka О. O jistém problému minimálním. 1926; Borûvka О. Příspěvek k otázce ekonomické. 1926).
Алгоритм является жадным. За и обозначаются множества рёбер и вершин графа за и – число рёбер и вершин в графе соответственно. Алгоритм использует (Nešetřil. 2001. P. 3–36) процедуру сжатия по множеству нескольких вершин графа которая объединяет множество в одну новую вершину. Вес ребра от каждой вершины до новой определяется как вес ребра наименьшего веса между этой вершиной и вершиной из в старом графе При этом считается, что вес ребра между несвязанными ребром вершинами равен
Пусть множество вершин таково, что подграф некоторого минимального остовного дерева графа порождённый связен. Пусть – результат сжатия графа по Тогда остовное дерево графа можно получить как порёберное объединение минимального остовного дерева графа и минимального остовного дерева, порождённого множеством подграфа Также данный факт остаётся верным и при сжатии нескольких непересекающихся множеств вершин.
Далее выполняются следующие шаги (Nešetřil J. 2001. P. 26):
Раскраска. Для каждой вершины раскрашиваем ребро между ней и ближайшей соседней вершиной. Рёбра, раскрашенные более одного раза, не отличаются от рёбер, раскрашенных единожды.
Сжатие. Сжимаем получившиеся компоненты связности на графе, порождённом раскрашенными рёбрами.
Рекурсивно повторяем предыдущие шаги, пока не найдём минимальное остовное дерево.
Объединение всех раскрашенных рёбер даёт искомое минимальное остовное дерево.
Раскраска и сжатие выполняются за линейное время Так как при раскраске графа раскрашивается число рёбер, не меньшее половины числа его вершин, то алгоритм сделает шагов прежде, чем найдёт минимальное остовное дерево. Таким образом, временна́я сложность алгоритма составляет
См. также «О большое».