引理
如果将图G切割成G1、G2,图G的最小生成树 = G1的最小生成树 + G2的最小生成树 + 连接G1、G2权重最小的边。
Kruskal’s Algorithm
步骤:
①分别对|V|个结点MAKE-SET
②对E按升序排序
③选择最短的一条边e(x, y),若FIND-SET(x) != FIND-SET(y),则加入树边的集合
时间分析:
①③花费O((V+E)α(V));②花费O(ElgE)
总时间:O(ElgE) / O(ElgV)
依赖于不相交数据集合:算法导论第21章:并查集
Prim’s Algorithm
步骤:
①随机选择结点S,其它结点的key设为+∞,加入到优先队列Q中,Q中结点代表为加入树中的结点。
②更新S邻接结点的key,选择key最小的结点加入树中
③重复这一过程,直到Q为空
时间分析:O(ElgV),但慢于Kruskal算法。