【圖】最小生成樹{更新中}

 

最小生成樹

最小生成樹的產生:希望在城市間建設基礎設施,連通所有城市,不考慮容錯性,如果花費最低成本實現?

最小生成子樹:原圖選出這樣的邊,讓所有頂點連通,邊權重和最低。(生成子圖不需要後兩個條件)

 

Kruskal算法

Kruskal算法的產生:從定義出發,選擇邊,讓其涵蓋所有頂點。邊的選擇使用貪心思想,限制是輻射生長的樹。假設圖包含 n個頂點。

  • 第 1 邊,先選擇最小權重的一條邊,記錄下已連通的 2 個頂點。
  • 第 2 邊,然後選擇下一條最小權重的邊,該邊不能連接已連通的頂點(否則形成環,多餘的邊被加入,如下圖1.1所示)。記錄下已連通的 3 個頂點
Kruskal算法選邊限制
圖 1.1 不加限制的貪心

 

  • 第 n-1 邊,繼續選擇下一條最小權重的邊,該邊不能連接已連通的頂點,此時已連通全部 n 個頂點,結束。

動態效果圖:

 

Prim算法

Prim算法的產生:類似路由選擇下一跳的過程。下一跳選擇使用貪心思想,類似Kruskal的輻射。

  • 先隨機選中一個頂點,選擇下一跳頂點,跳躍邊權重最小。
  • 此時圖已包含了兩個頂點,觀察兩個頂點的所有下一跳頂點,繼續選擇該下一跳權重最小的頂點,且該頂點還沒連通上。
  • 此時圖已包含了三個頂點,觀察三個頂點的所有下一跳頂點,繼續選擇該下一跳權重最小的頂點,且該頂點還沒連通上。
  • 。。。
  • 此時圖已包含了 n-1 個頂點,觀察 n-1 個頂點的所有下一跳頂點,繼續選擇該下一跳權重最小的頂點,且該頂點還沒連通上,也就是最後一個頂點。
  • 此時圖已包含了 n 個頂點,結束。

數據結構:集合動態記錄已連通的節點。鄰接信息(表/矩陣)。

動態效果圖:

發佈了20 篇原創文章 · 獲贊 20 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章