原文地址:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html
Prim演算法
1.概覽
普裡姆演算法(Prim演算法),圖論中的一種演算法,可在加權連通圖裡搜尋最小產生樹。意即由此演算法搜尋到的邊子集所構成的樹中,不但包括了連通圖裡的所有頂點(英語:Vertex (graph theory)),且其所有邊的權值之和亦為最小。該演算法於1930年由捷克數學家沃伊捷赫·亞爾尼克(英語:Vojtěch Jarník)發現;並在1957年由美國電腦科學家羅伯特·普裡姆(英語:Robert C. Prim)獨立發現;1959年,艾茲格·迪科斯徹再次發現了該演算法。因此,在某些場合,普裡姆演算法又被稱為DJP演算法、亞爾尼克演算法或普裡姆-亞爾尼克演算法。
2.演算法簡單描述
1).輸入:一個加權連通圖,其中頂點集合為V,邊集合為E;
2).初始化:Vnew = {x},其中x為集合V中的任一節點(起始點),Enew = {},為空白;
3).重複下列操作,直到Vnew = V:
a.在集合E中選取權值最小的邊<u, v>,其中u為集合Vnew中的元素,而v不在Vnew集合當中,並且v∈V(如果存在有多條滿足前述條件即具有相同權值的邊,則可任意選取其中之一);
b.將v加入集合Vnew中,將<u, v>邊加入集合Enew中;
4).輸出:使用集合Vnew和Enew來描述所得到的最小產生樹。
下面對演算法的圖例描述
| 圖例--------------------------- |
說明----------------------------------------------------- |
不可選 |
可選--------- |
已選----------------- |
|
為原始的加權連通圖。每條邊一側的數字代表其權值。 |
- |
- |
- |
|
頂點D被任意選為起始點。頂點A、B、E和F通過單條邊與D相連。A是距離D最近的頂點,因此將A及對應邊AD以高亮表示。 |
C, G |
A, B, E, F |
D |
|
下一個頂點為距離D或A最近的頂點。B距D為9,距A為7,E為15,F為6。因此,F距D或A最近,因此將頂點F與相應邊DF以高亮表示。 |
C, G |
B, E, F |
A, D |
|
演算法繼續重複上面的步驟。距離A為7的頂點B被高亮表示。 |
C |
B, E, G |
A, D, F |
|
在當前情況下,可以在C、E與G間進行選擇。C距B為8,E距B為7,G距F為11。E最近,因此將頂點E與相應邊BE高亮表示。 |
無 |
C, E, G |
A, D, F, B |
|
這裡,可供選擇的頂點只有C和G。C距E為5,G距E為9,故選取C,並與邊EC一同高亮表示。 |
無 |
C, G |
A, D, F, B, E |
|
頂點G是唯一剩下的頂點,它距F為11,距E為9,E最近,故高亮表示G及相應邊EG。 |
無 |
G |
A, D, F, B, E, C |
|
現在,所有頂點均已被選取,圖中綠色部分即為連通圖的最小產生樹。在此例中,最小產生樹的權值之和為39。 |
無 |
無 |
A, D, F, B, E, C, G |