貪心算法-最小生成樹Kruskal算法和Prim算法


Kruskal算法:

不斷地選擇未被選中的邊中權重最輕且不會形成環的一條。

簡單的理解:

不停地循環,每一次都尋找兩個頂點,這兩個頂點不在同一個真子集里,且邊上的權值最小。

把找到的這兩個頂點聯合起來。

初始時,每個頂點各自屬於自己的子集合,共n個子集合。

每一步操作,都會將兩個子集合融合成一個,進而減少一個子集合。

結束時,所有的頂點都在同一個子集合里,這個子集合就是最小生成樹。

例子:

偽代碼:

 

 Prim算法:

G=(V,E),S是V的真子集,如果u在S中,v在V-S中,且(u,v)是圖的一條邊,稱之為特殊邊,且(u,v)是所有特殊邊中最短的,那么,(u,v)這條邊一定在最小生成樹中。

任意指定一個頂點作為起始點,放在S中。

每一步將最短的特殊邊放入S中,需要n-1步,即可把所有的其他的點放入S中。算法結束。

例子:由節點A開始。

 偽代碼:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM