最小生成树Minimum spanning tree

在无向连通图中,用总边权最小的 V−1 条边连接所有顶点。Kruskal 按边合并分量,Prim 从一个顶点逐步扩展树。

怎样选择#

  • V 为顶点数,E 为边数。边权可以为负,也可以重复;不连通图的对应目标是最小生成森林。
  • 最小生成树优化所选边的总权重,并不保证树中任意两点之间的路径最短。
  • 输入已经是边列表时,Kruskal 的排序与并查集组合直接;邻接矩阵上的稠密图可考虑 O(V²) 的 Prim。

算法对照#

具体算法问题与前提时间复杂度辅助空间选择与取舍
Kruskal无向加权图;按边权全局处理O(Elog⁡E)O(E \log E),另计 O(V)O(V) 初始化O(V+E)O(V+E),包括排序所需的边副本排序后用并查集跳过成环边;容易得到各连通分量的最小生成森林。
Prim无向加权图;从树与树外的割扩展索引二叉堆 O((V+E)log⁡V)O((V+E)\log V);矩阵 O(V2)O(V^{2})索引堆版 O(V)O(V),不含输入图每个树外顶点只维护到当前树的最轻连接;不连通时需对各分量重新启动。

左右滑动查看完整对照。点击算法名称,查看原理、约束和实现。

参考资料#

Princeton Algorithms · KruskalMST

Princeton Algorithms · PrimMST

2 个概念