Skip to content

Borůvka 算法

Boruvka algorithm

每轮为每个连通分量并行选择最轻出边并收缩,构造最小生成森林。

条目类型
算法

形式陈述

算法与安全性

为构造最小生成树,初始令每个顶点自成分量。每轮扫描跨分量边,为每个非孤立分量选择一条最轻出边,再用并查集接受连接不同当前根的候选。

对轮初分量 C,其最轻出边 e 跨割 (C,VC)。取一棵不含 e 的 MST,加入 e 形成环;环上另有一条跨该割的边 f,且 w(e)w(f)。以 e 替换 f 不增总权,所以 e 可属于某棵 MST。

多个分量同时选择时,可按某个顺序应用交换论证。候选边若在此前合并后已经形成环,DSU 会跳过它;相同权重时任一最轻出边都安全,但最终 MST 可能不唯一。

直觉

Borůvka 不是从某一个顶点向外长树,而是让当前森林的每个分量同时寻找最便宜的对外连接。每个非孤立分量都必须与至少另一个分量合并,所以超级顶点数按轮成倍缩小;割性质则保证这些局部选择可以同时嵌入某棵全局最优生成树。

Borůvka 算法轮次示意图
例子与边界

一轮状态追踪

设轮初分量为 A={1,2},B={3},C={4,5},跨边最小权分别为 w(AB)=2,w(AC)=5,w(BC)=3。A 与 B 都选择 AB,C 选择 BC。去重后依次接受 AB、BC,三个旧分量在这一轮合成一个。

若若干候选恰围成环,前面的边先连接不同根,最后闭环的边会被跳过。算法不要求所有“被选择”边端点互异,也不要求候选集合本身无环;要求的是实际加入的边始终保持森林。

轮数与总工作

令某个原连通分量在轮初还含 c>1 个超级顶点。每个超级顶点都有出边并至少选一条,所以候选边图的每个新连通块含至少两个旧分量;轮末超级顶点数至多 c/2。因此至多 log2n 轮,这个界与边权随机性无关。

朴素实现每轮扫描 m 条原边,用 DSU 根识别内部边并更新两端分量的 best edge,总时间 O(mlogn) 再加近线性的并查集开销。断开图对每个原连通分量独立减半,最终输出最小生成森林;孤立点没有候选边。

收缩实现不变量

扫描边时应以轮初根为分量身份收集候选,再统一执行 union。若边扫描到一半就合并,后半轮的“每个分量最轻边”会混用两个不同阶段的分量划分,安全性与减半分析都不再对应同一轮。

收缩后,旧内部边可删除;同一对超级顶点之间的平行边只需保留最轻者供 MST 选择。若保留原边列表重复扫描也仍正确,只是工作量较大。候选记录要保存原始端点,才能把超级顶点间选择还原为输出森林边。

推论与应用

Borůvka 每轮让每个连通分量选择最轻出边,这是贪心算法的安全边选择:cut property 保证这些边可同时包含在某棵最小生成树中。分量合并使轮数对数下降。

与 Prim、Kruskal 对照

Prim 从一个连通块逐边扩展,Kruskal 全局按边权排序,Borůvka 为所有分量并行选边并收缩。三者都依赖 cut property,却有不同的数据访问、并行方式与中间状态;不能把 Borůvka 的轮减半界套到另外两种流程。

参考资料
  • Otakar Borůvka, original MST work, 1926.
  • Robert Tarjan, Data Structures and Network Algorithms, 1983.
  • Karger, Klein, Tarjan, randomized MST, JACM 1995.
关系图谱6 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系