數據結構——最小生成樹

一、相關概念

  1. 連通圖:圖中的任意兩個節點之間都是聯通的,即:總能從A節點按照一定路徑走到B節點。
  2. 生成樹:爲聯通圖的一個聯通子圖,包含N個結點和N-1條邊。
  3. 最小生成樹:當聯通圖中的每條邊帶有權值時,所有邊權值和最小的生成樹。

二、問題導向

    各個城市之間修建鐵路,城市之間鋪設電纜、水管等,不考慮環境等複雜因素,肯定最小生成樹對應的權值(對應管線、鐵路等長度)和最小怎樣才能成本最低。因此如何鋪設的問題轉化成了找到這個最小生成樹的問題。如下圖(A~F表示城市,線上的數字表示距離):

三、相關算法

注:正常情況下沒有辦法一眼看出來該如何選擇的,如果更復雜一點的話就更難用眼睛看出來的了,因此面對該問題需要有響應的算法來解決。聽着很高端、實際實現的代碼邏輯很複雜,但是懂了思想理解起來很容易。
最終目的: 找到我們想要的N-1條線。

Prim算法:

通俗理解:

  1. 任意選擇一個結點開始(從此已有結點多了一個0到1)
  2. 從已有的結點中,找與已有結點和剩下的結點連線權限最小的那個
  3. 迭代重複第二步,直到所有結點都被連接。此時剛哈N-1條邊。

舉例: 假設以A爲第一個點,我們依次被連接的頂點順序爲:A->F->E->D->C->B,邊被選擇的順序爲:4、2、3、4、3。步驟爲紅色12345的順序。

Kruskal算法:

通俗理解:

  1. 從所有的邊中找最短的邊
  2. 保證,所有的邊連起來不能構成環路,如果構成環路則選擇次小的邊、或者次次小的邊,
  3. 按照第二部的要求,重複第一步的過程,直到所有的結點被連接。

舉例: 依次被選擇的邊:2(EF)->3(D)->3(BC)->4(A)->4。步驟爲紅色12345的順序。

  
  
Email : [email protected]
Website : http://beyonderwei.com
  
WeChat:

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