Prim的演算法是一種用於尋找最小生成樹的貪婪演算法。
簡單來說,Prim演算法通過從一個起點開始,選擇邊的方式來構建一個最小生成樹。演算法開始時,選擇任意一點作為起點,然後選取與該起點相連的最小權值邊,a和b兩個點在生成樹上,沒有其他的路線能夠從a和b這兩個點達到,接著選擇與a或b相連的點到生成樹上(由於是連到a或b點,最小權值邊的選擇是唯一的),此過程迭代直到生成樹中包含了所有頂點。
例如,考慮下圖:
C
/ | \
3/ |2\ \4
A---F---B
2\ |5/ /3
\ | /
D
從節點A開始,該該節點被添加到生成樹中。 節點A與節點F之間的邊(權值為2)是包含節點A的最小權值邊,添加節點F。節點A與節點C之間的邊(權值為3)是包含節點A的最小權值邊,添加節點C。 節點F與節點B之間的邊(權值為2)是包含節點B,F的最小權值邊,添加節點B。 節點F與節點D之間的邊(權值為5)是包含節點B、F、D的最小權值邊,添加節點D。 節點F與節點E之間的邊(權值為4)是包含節點B、F、E、D的最小權值邊,添加節點E。
最終生成樹如下所示:
C
|
(3) A
|
F
/ | \
2/ | \2
B E D
A --2-- B --1-- C
/ | / |
8 3 1 5
/ | / |
D --2-- E --4-- F --3-- G
答案:11
A --2-- B --1-- C --2-- D
/ | / | |
3 1 6 3 4
/ | / | |
E --5-- F --2-- G --5-- H --3-- I
答案:13
A --2-- B --1-- C --2-- D --3-- E
/ | / | | |
7 6 1 2 8 5
/ | / | / |
F --3-- G --4-- H --10-- I --2-- J --1-- K
答案:16
A --3-- B --1-- C --2-- D --5-- E
/ | / | | |
10 2 5 4 7 8
/ | / | / |
F --8-- G --3-- H --1-- I --2-- J --4-- K
答案:19
A --2-- B --1-- C --2-- D --3-- E
/ | / | | |
8 10 6 2 1 2
/ | / | / |
F --3-- G --4-- H --7-- I --9-- J --3-- K
答案:19