Алгоритм Боровки является одним из стандартных алгоритмов вычисления минимального остовного дерева для графа , где | V | = n , | E | = М .
Псевдокод:
MST T = empty tree
Begin with each vertex as a component
While number of components > 1
For each component c
let e = minimum edge out of component c
if e is not in T
add e to T //merging the two components connected by e
Мы называем каждую итерацию внешнего цикла раундом. В каждом раунде внутренний цикл сокращает количество компонентов, по крайней мере, пополам. Поэтому существует не более раундов. В каждом раунде внутренний цикл просматривает каждое ребро не более двух раз (по одному разу от каждого компонента). Следовательно, время работы составляет самое большее O ( m log n ) .
Теперь предположим, что после каждого раунда мы удаляем все ребра, которые соединяют только вершины в одном и том же компоненте, а также удаляем дубликаты ребер между компонентами, так что внутренний цикл смотрит только на некоторое количество ребер m '<m, которые являются ребрами минимального веса, которые подключите два ранее отсоединенных компонента.
Как эта оптимизация влияет на время работы?
Однако, хотя оптимизация значительно сократит количество рассмотренных ребер (только 1 ребро к финальному раунду и не более # компонентов выбирает 2 в целом), неясно, как / если мы сможем использовать этот факт для ужесточения анализа во время выполнения.