天天看點

Prim算法(并查集)

普裡姆算法(Prim算法),圖論中的一種算法,可在權重連通圖裡搜尋​​最小生成樹​​。意即由此算法搜尋到的邊子集所構成的樹中,不但包括了連通圖裡的所有頂點(英語:Vertex (graph theory)),且其所有邊的權值之和亦為最小

 基本思想:假設G=(V,E)是連通的,TE是G上最小生成樹中邊的集合。算法從U={u0}(u0∈V)、TE={}開始。重複執行下列操作:

   在所有u∈U,v∈V-U的邊(u,v)∈E中找一條權值最小的邊(u0,v0)并入集合TE中,同時v0并入U,直到V=U為止。

圖例 說明 不可選 可選 已選(Vnew)
​​
Prim算法(并查集)
​​
此為原始的權重連通圖。每條邊一側的數字代表其權值。 - - -
​​
Prim算法(并查集)
​​
頂點D被任意選為起始點。頂點A、B、E和F通過單條邊與D相連。A是距離D最近的頂點,是以将A及對應邊AD以高亮表示。 C, G A, B, E, F D
​​
Prim算法(并查集)
​​
下一個頂點為距離D或A最近的頂點。B距D為9,距A為7,E為15,F為6。是以,F距D或A最近,是以将頂點F與相應邊DF以高亮表示。 C, G B, E, F A, D
​​
Prim算法(并查集)
​​
算法繼續重複上面的步驟。距離A為7的頂點B被高亮表示。 C B, E, G A, D, F
​​
Prim算法(并查集)
​​
在目前情況下,可以在 C、 E與 G間進行選擇。 C距 B為8, E距 B為7, G距 F為11。點 E最近,是以将頂點 E與相應邊 BE高亮表示。 C, E, G A, D, F, B
​​
Prim算法(并查集)
​​
這裡,可供選擇的頂點隻有C和G。C距E為5,G距E為9,故選取C,并與邊EC一同高亮表示。 C, G A, D, F, B, E
​​
Prim算法(并查集)
​​
頂點G是唯一剩下的頂點,它距F為11,距E為9,E最近,故高亮表示G及相應邊EG。 G A, D, F, B, E, C
​​
Prim算法(并查集)
​​
現在,所有頂點均已被選取,圖中綠色部分即為連通圖的最小生成樹。在此例中,最小生成樹的權值之和為39。