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

來源:互聯網
上載者:User

標籤:http   width   strong   art   演算法   表   

給定一個帶權的無向連通圖,怎樣選取一棵產生樹,使樹上全部邊上權的總和為最小,這叫最小產生樹.

求最小產生樹的演算法
(1) 克魯斯卡爾演算法
圖的存貯結構採用邊集數組,且權值相等的邊在數組中排列次序能夠是隨意的.該方法對於邊相對照較多的不是非常有用,浪費時間.
(2) 普裡姆演算法
圖的存貯結構採用鄰接矩陣.此方法是按各個頂點連通的步驟進行,須要用一個頂點集合,開始為空白集,以後將以連通的頂點陸續增加到集合中,所有頂點增加集合後就得到所需的最小產生樹 .

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

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

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

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

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

第五步:選第五條邊

 

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

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

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

 

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

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

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

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

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.