kruskal算法構造最小生成樹

kruskal算法構造最小生成樹

1.問題
假設G=(V,E)是連通的,TE是G上最小生成樹中邊的集合。算法從U={u0}(u0∈V)、TE={}開始。重複執行下列操作:
每次找權值最小的邊,將連接兩條邊的頂點加入集合U中,構造最小生成樹。

2.解析
在這裏插入圖片描述
(1)圖中有6個頂點v1-v6,每條邊的邊權值都在圖上;由圖可知,v2-v3這條邊權值最小,所以選擇它爲起始邊。U={v1,v3}; E={(v1,v3)};
(2)現在繼續查找權值最小的邊,如圖所示,通過圖中我們可以看到邊v4-v6的權值最小爲2,那麼將v4,v6 加入到U集合,(v4,v6)加入到E,狀態如下:
U={v1,v3,v4,v6}; E={(v1,v3),(v4,v6)};
(3)繼續尋找,現在狀態爲U={v1,v3,v4,v6}; E={(v1,v3),(v4,v6)};在相交的邊上查找最小值。
我們可以找到最小的權值爲(v2,v5)=4,那麼我們將v2,v5加入到U集合,並將最小邊加入到TE集合,那麼加入後狀態如下:
U={v1,v3,v4,v6,v2,v5}; E={(v1,v3),(v4,v6),(v2,v5)}; 如此循環一下直到找到所有頂點並且相互連通爲止。

3.設計
在這裏插入圖片描述
4.分析
時間複雜度:O(nlogn) (n爲邊數)

5.源碼地址 https://github.com/ylx1234/prim-kruskal