1. 程式人生 > >[Data Structure & Algrithom] 無向圖的最小生成樹

[Data Structure & Algrithom] 無向圖的最小生成樹

kruskal算法 如果 data spa amp imu 數據 結點 實現

最小生成樹(Minimum Spanning Tree) - 連接所有頂點的邊的權值之和最小的樹

Prim算法

  • 基本思路 - 設 圖的頂點集合為V;其最小生成樹的頂點集合為U
    1. 將某個頂點放入U
    2. 在一個頂點屬於U,另一個頂點屬於V-U的所有的邊中,找到權值最小的邊
    3. 將找到的邊的不屬於U的頂點,放入U中,重復2,直至U中包含了所有頂點
  • 具體實現
    • 引入輔助數組edge[],長度等於頂點數
      • 結點結構 - 數據域vertex(與該頂點相連的另一頂點)|權值cost(這條邊的權值)
      • 對於在U中的結點 i - edge[i].cost = 0
      • 對於在V-U中的結點 j -edge[j]代表與結點j相連的權值最小的邊
    • 時間復雜度 O(n2) (與邊的數量無關)
  • 適用於邊稠密的圖

Kruskal算法

  • 基本思路
    1. 在圖中選擇權值最小的邊
    2. 如果這條邊不會形成環路,則選擇這條邊;否則,查找下一權值的邊
  • 時間復雜度(與頂點數量無關)
    • O(n2) - 已經按照邊的權值排序
    • O(elog2e) - 未按照邊的權值排序
  • 適用於邊系數的圖

[Data Structure & Algrithom] 無向圖的最小生成樹