1、Prim算法html
普利姆(Prim)算法適用於求解無向圖中的最小生成樹(Minimum Cost Spanning Tree)。下面是Prim算法構造最小生成樹的過程圖解。算法
選擇一個節點開始,好比V1進入集合U,剩下的集合的V-U包括剩下的節點,而後尋找從集合U到集合V-U最近的路徑。這裏有三條路徑分別是權重爲6到V2,權重爲5到V4以及權重爲1到V3,顯然到經過V3鏈接而集合U和集合V-U是最近的,選擇V3進入集合U。一樣繼續選擇到V-U的路徑,此時有6條可選路徑,分別是權爲6到V2【從V1】,權爲5到V4【從V1】,權爲5到V2【從V3】,權爲5到V4【從V3】,權爲6到V5【從V3】,權爲4到V6【從V3】。選擇出從V3到V6的路徑並將V6添加至集合U中。按照這種方法依次將V4,V2和V5添加到集合U直到U和全體節點結合V相等,或者說V-U集合爲空時結束,這時選出的n-1條邊即爲最小生成樹。
網絡
2、Kruskal算法spa
克魯斯卡爾(Kruskal)算法是另外一種求解最小生成樹的算法。下面是Kruskal算法構造最小生成樹的過程圖解。3d
Kruskal則是採起另外一種思路,即從邊入手。首先n個頂點分別視爲n個連通份量,而後選擇一條權重最小的邊,若是邊的兩端分屬於兩個連通份量,就把這個邊加入集合E,不然捨去這條邊而選擇下一條代價最小的邊,依次類推,直到全部節點都在同一個連通份量上。htm
3、對比blog
假設網中有n個節點和e條邊,普利姆算法的時間複雜度是O(n^2),克魯斯卡爾算法的時間複雜度是O(eloge),能夠看出前者與網中的邊數無關,然後者相反。所以,普利姆算法適用於邊稠密的網絡而克魯斯卡爾算法適用於求解邊稀疏的網。get