“Kruskal 算法从许多单点分量出发,按全局边序逐渐合并;Prim 始终只有一棵活动树。Borůvka 算法又让所有分量并行选择出边。三者共享割性质,但 Prim 的键更新、Kruskal…”
形式陈述
算法与安全性
为构造最小生成树,初始令每个顶点自成分量。固定一个全局边顺序,以
固定的平局规则可理解为不改变原权重大小关系的符号微扰,它在原图的最小生成树中选定一棵唯一的
这一约定也直接排除了候选中的真环:若有环,环上比较键最大的边不可能被任一端分量选中,因为该端还有环上另一条更小的出边。同一条无向边被两端同时选择只产生重复记录,DSU 会在第二次遇到时跳过它。
直觉
Borůvka 不是从某一个顶点向外长树,而是让当前森林的每个分量同时寻找最便宜的对外连接。每个非孤立分量都必须与至少另一个分量合并,所以超级顶点数按轮成倍缩小;统一平局规则下的割性质与重复候选处理,使实际接受的森林能够扩充为某棵最小生成树。
例子与边界
一轮状态追踪
设轮初分量为
候选可以共享端点,但上述统一平局规则保证去重后没有环。若允许不同分量各自任意打破平局,等权三角形可能让三个顶点各选下一条边而选出整圈,此时还需一个经证明安全的去环方案;本页采用统一边序,直接避免这项额外义务。
轮数与总工作
令某个原连通分量在轮初还含
一种明确的实现先冻结本轮的分量标签,再扫描
收集完候选后才执行 union。有出边的活动分量逐轮至少减半,全部轮次的候选记录数为
收缩实现不变量
扫描边时应以轮初根为分量身份收集候选,再统一执行 union。若边扫描到一半就合并,后半轮的“每个分量最轻边”会混用两个不同阶段的分量划分,安全性与减半分析都不再对应同一轮。
收缩后,旧内部边可删除;同一对超级顶点之间的平行边只需保留最轻者供 MST 选择。若保留原边列表重复扫描也仍正确,只是工作量较大。候选记录要保存原始端点,才能把超级顶点间选择还原为输出森林边。
推论与应用
与 Prim、Kruskal 对照
Prim 从一个连通块逐边扩展,Kruskal 全局按边权排序,Borůvka 为所有分量并行选边并收缩。三者都用割性质证明贪心选择的安全性;Borůvka 的全分量扫描便于并行处理,轮末收缩则逐步减小后续问题的规模。
参考资料
- Robert Sedgewick、Kevin Wayne,BoruvkaMST.java,固定边扫描次序统一处理权重平局,先收集候选再合并。
- Otakar Borůvka, original MST work, 1926.
- Robert Tarjan, Data Structures and Network Algorithms, 1983.
- Karger, Klein, Tarjan, randomized MST, JACM 1995.