數據結構_圖_最小生成樹

github地址:
https://github.com/arkulo56/thought/blob/master/software/dataStruct/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84_%E5%9B%BE_%E6%9C%80%E5%B0%8F%E7%94%9F%E6%88%90%E6%A0%91.md

圖-最小生成樹(聯通網的最小代價生成樹)

(有規律的連續訪問多個頂點的需求)

假設你是電信實施工程師,需要為一個鎮的九個村莊架設通信網絡做設計,村與村之間的距離就是邊的權重,領導要求用最小成本完成任務,你該怎么做???

  1. 最小生成樹也就是最小權重生成樹
  2. n個頂點擁有n-1條邊(想想樹的節點個數),使得所有頂點之間都有路徑可達
  3. n個節點之間不能構成回路 重要!!!

Prim算法/普里姆算法

原理:對于圖G=(V,E),用Prim算法求最小生成樹T=(S,TE)的流程如下:

  1. 初始化:設S、TE為空集,任選頂點k加入S
  2. 選取一條權值最小的邊(X,Y), 其中X
    S(X屬于S),且 NOT(Y
    S)(Y不屬于S),即:選取一條權值最小的、連接著S中一頂點和S外一頂點的邊
  3. 重復步驟2,直到所有頂點都在S中

Kruskal算法

原理:圖G=(V,E)

  1. 最小生成樹T=(S,TE)
  2. 將G中的所有邊按照權重進行升序排序,從小到大加入最小生成樹
  3. 如果將選中的邊加入TE后,TE不會形成環(回路),則加入,否則丟棄
  4. 重復步驟3,直到所有頂點都在S中

圖形推演

總結

可以從圖中看到,兩種算法最后生成的最小生成樹是一樣的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 圖是一種比線性表和樹更復雜的數據結構,在圖中,結點之間的關系是任意的,任意兩個數據元素之間都可能相關。圖是一種多對...
    Alent閱讀 2,342評論 1 22
  • 數據結構與算法--最小生成樹之Prim算法 加權圖是一種為每條邊關聯一個權值或稱為成本的圖模型。所謂生成樹,是某圖...
    sunhaiyu閱讀 2,095評論 0 7
  • 第一章 緒論 什么是數據結構? 數據結構的定義:數據結構是相互之間存在一種或多種特定關系的數據元素的集合。 第二章...
    SeanCheney閱讀 5,821評論 0 19
  • 課程介紹 先修課:概率統計,程序設計實習,集合論與圖論 后續課:算法分析與設計,編譯原理,操作系統,數據庫概論,人...
    ShellyWhen閱讀 2,361評論 0 3
  • https://zh.visualgo.net/graphds 淺談圖形結構https://zh.visualgo...
    狼之獨步閱讀 4,222評論 0 0