最小生成樹(普里姆算法、克魯斯卡爾算法)

最小生成樹(普利姆算法、克魯斯卡爾算法)                   

       

給定一個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和爲最小,這叫最小生成樹.

求最小生成樹的算法
(1) 克魯斯卡爾算法
圖的存貯結構採用邊集數組,且權值相等的邊在數組中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.
(2) 普里姆算法
圖的存貯結構採用鄰接矩陣.此方法是按各個頂點連通的步驟進行,需要用一個頂點集合,開始爲空集,以後將以連通的頂點陸續加入到集合中,全部頂點加入集合後就得到所需的最小生成樹 .


下面來具體講下:
克魯斯卡爾算法
方法:將圖中邊按其權值由小到大的次序順序選取,若選邊後不形成迴路,則保留作爲一條邊,若形成迴路則除去.依次選夠(n-1)條邊,即得最小生成樹.(n爲頂點數)

第一步:由邊集數組選第一條邊

第二步:選第二條邊,即權值爲2的邊

第三步:選第三條邊,即權值爲3的邊

第四步:選第四條邊,即權值爲4的邊

第五步:選第五條邊


普里姆算法
方法:從指定頂點開始將它加入集合中,然後將集合內的頂點與集合外的頂點所構成的所有邊中選取權值最小的一條邊作爲生成樹的邊,並將集合外的那個頂點加入到集合中,表示該頂點已連通.再用集合內的頂點與集合外的頂點構成的邊中找最小的邊,並將相應的頂點加入集合中,如此下去直到全部頂點都加入到集合中,即得最小生成樹.
例在下圖中從1點出發求出此圖的最小生成樹,並按生成樹的邊的順序將頂點與權值填入表中.

———————>先寫出其鄰接矩陣

第一步:從①開始,①進集合,用與集合外所有頂點能構成的邊中找最小權值的一條邊
①——②權6
①——③權1 -> 取①——③邊
①——④權5

第二步:③進集合,①,③與②,④,⑤,⑥構成的最小邊爲
①——④權5
③——⑥權4 -> 取③——⑥邊

第三步:⑥進集合,①,③,⑥與②,④,⑤構成的各最小邊
①——②權6
③——②權5
⑥——④權2 -> 取⑥——④邊

第四步:④進集合,①,③,⑥,④與②,⑤構成的各最小邊
①——②權6
③——②權5 -> 取③——②邊
⑥——⑤權6

第四步:②進集合,①,③,⑥,②,④與⑤構成的各最小邊
②——⑤權3 -> 取②——⑤邊


這也是在網上找到的一個Kruskal和Prim構造過程圖,貼出來:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章