“Kruskal 算法从许多单点分量出发,按全局边序逐渐合并;Prim 始终只有一棵活动树。Borůvka 算法又让所有分量并行选择出边。三者共享割性质,但 Prim 的键更新、Kruskal…”
形式陈述 ​
算法与安全性 ​
为构造最小生成树,初始令每个顶点自成分量。每轮扫描跨分量边,为每个非孤立分量选择一条最轻出边,再用并查集接受连接不同当前根的候选。
对轮初分量
多个分量同时选择时,可按某个顺序应用交换论证。候选边若在此前合并后已经形成环,DSU 会跳过它;相同权重时任一最轻出边都安全,但最终 MST 可能不唯一。
直觉
Borůvka 不是从某一个顶点向外长树,而是让当前森林的每个分量同时寻找最便宜的对外连接。每个非孤立分量都必须与至少另一个分量合并,所以超级顶点数按轮成倍缩小;割性质则保证这些局部选择可以同时嵌入某棵全局最优生成树。
例子与边界
一轮状态追踪 ​
设轮初分量为
若若干候选恰围成环,前面的边先连接不同根,最后闭环的边会被跳过。算法不要求所有“被选择”边端点互异,也不要求候选集合本身无环;要求的是实际加入的边始终保持森林。
轮数与总工作 ​
令某个原连通分量在轮初还含
朴素实现每轮扫描
收缩实现不变量 ​
扫描边时应以轮初根为分量身份收集候选,再统一执行 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.