图论(十)最小生成树-Prim算法
前面說過,Prim算法是從頂點著手構建最小生成樹的。應該說,Prim算法比Kruskal更簡單。我們還是以前面的鄉鎮假設光纖網絡為例:
Prim算法工作步驟
(1)?構建全部頂點集V,選取初始頂點,加入頂點集U。
構建頂點集V={a,b,c,d,e,f,g,h,i},從中選取任意一個頂點。我們假設從頂點a開始。將a加入到頂點集U={a}中。
(2)?找U中頂點與V-U中頂點的所有邊。
?
U中頂點只有a,V-U={b,c,d,e,f,g,h,i},則U中頂點與V-U中頂點的所有邊為a-b和a-f,圖中紫色邊。U中頂點為綠色背景頂點,V-U中頂點為黑色背景頂點。
(3)?選取所有邊中的最短邊加入最小生成樹。
所有邊a-b和a-f中的最短邊a-b,將其加入最小生成樹(圖中綠色邊)。
(4)?將最短邊另一頭的頂點,加入頂點集合U。
最短邊a-b的另一頭頂點為b,將b加入到U={a,b}。
(5)?繼續找U中頂點與V-U中頂點的所有邊。
此時,U={a,b},V-U={c,d,e,f,g,h,i},則U與V-U中頂點所有邊為a-f,?b-c,?b-g,b-h。圖中紫色邊所示。
(6)?繼續選取最短邊,將最短邊加入最小生成樹,并將最短邊另一頭頂點加入U。
此時最短邊為a-f,將最短邊加入最小生成樹,并將最短邊頂點f加入U={a,b,f}。此時V-U={c,d,e,g,h,i}。
?
(7)?如此循環反復,直至U=V。
下面是按順序的U和V-U以及最小生成樹的變化過程:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? U={a,b,f,g};V-U={c,d,e,h,i} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? U={a,b,f,g,h};V-U={c,d,e,i}
?
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? U={a,b,c,f,g,h};V-U={d,e,i} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?U={a,b,c,f,g,h,i};V-U={d,e}
?
??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?U={a,b,c,e,f,g,h,i};V-U=ze8trgl8bvbq ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?U={a,b,c,d,e,f,g,h,i};V-U={}
?
為什么不會構成環
因為我們在尋找邊時,只是找U與V-U中頂點所構成的邊,而U中內部頂點的邊是不會找的。找到最短邊后,直接將另一頭頂點加入U了,也就是說這兩個頂點都在U中了,即使這2個頂點還有其他路徑,后面都不會再找,也就不會構成回路了。
總結
以上是生活随笔為你收集整理的图论(十)最小生成树-Prim算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图论(九)最小生成树-Kruskal算法
- 下一篇: 分类模型的评估方法-正确率(Accura