图的算法-最小生成树

转载:转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175

一.Prim算法

适用于:边较多时

法:

时间复杂度:O(V^2)

  • 在已得最小生成树各个节点,(绿色set:A,C,G)
  • 向外部其他节点的节点中(白色set:B,F,D),找到连边权值最小(2)的点(D),
  • 加入最小生成树集合(->绿色set:A,C,G,D)。

直到:绿色set.size=sizeof(all node)

其他参考图:

二.Kruskal 算法

适用于:边较少:稀疏图

法:

时间复杂度:O(ElogV)

  • 将各个节点看作 各个独立的set(绿1:A,C,D; 绿2:B,F; 白:G)
  • 选取能够连接的两个节点分属不同set的边(min{AB=6,FC=5,FG=6,GC=7,GD=6})。取权值最小者(FC:5最小)。
  • 将该边连接的两个set合并为一个set(绿1+绿2 = A,D,C-F,B)。

直到:

  • 绿色sizeof(one set edges) = n-1
  • or sizeof(one set nodes) = sizeof(all node)

其他参考图:

原文地址:https://www.cnblogs.com/habibah-chang/p/14490285.html