图的算法-最小生成树

转载:转载请注明出处:勿在浮沙筑高台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中的边:{绿1:AC=1, CD=2} {绿2:BF=3}
  • 选取能够连接的两个节点分属不同set的边(min{AB=6,BC=5,FC=5,FG=6,CG=7,DG=6})。取权值最小者(BC:5最小)。
  • 将该边连接的两个set合并为一个set(绿1+绿2 = A,D,C-B,F)。
    • 加入BC后的set状态:{绿1:AC=1, CD=2,CB=5,绿2:BF=3}

直到:

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

 

 

 

其他参考图:

 

 

 

posted @ 2021-03-06 13:01  habibah_chang  阅读(115)  评论(0编辑  收藏  举报