最大生成樹

最大生成樹(Maximum Spanning Tree, MST)是在一個帶有權重的圖中,找出一個生成樹,使得所有邊的權重總和最大。這裡的「生成樹」是指一個包含圖中所有節點的樹,且每個節點都恰好出現在樹中一次。

最大生成樹問題通常用Kruskal's algorithm(克魯斯卡爾算法)或Prim's algorithm(普里姆算法)來解決。

Kruskal's algorithm 是一種貪心算法,它的步驟如下:

  1. 對圖中的邊按照權重從小到大排序。
  2. 從圖中選取權重最小的邊,但必須保證這條邊不形成循環。
  3. 重複步驟2,直到圖中的節點都被生成樹連接起來。

Prim's algorithm 也是一種貪心算法,它的步驟如下:

  1. 從圖中任意一個節點開始,將其標記為已訪問。
  2. 從未訪問的節點中選擇權重最小的邊,將該邊連接的未訪問節點標記為已訪問。
  3. 重複步驟2,直到所有節點都被標記為已訪問。

兩種算法都可以找到最大生成樹,但Kruskal's algorithm 通常適用於邊的數量較多的圖,而Prim's algorithm 則適用於節點的數量較多的圖。