最大生成樹
最大生成樹(Maximum Spanning Tree, MST)是在一個帶有權重的圖中,找出一個生成樹,使得所有邊的權重總和最大。這裡的「生成樹」是指一個包含圖中所有節點的樹,且每個節點都恰好出現在樹中一次。
最大生成樹問題通常用Kruskal's algorithm(克魯斯卡爾算法)或Prim's algorithm(普里姆算法)來解決。
Kruskal's algorithm 是一種貪心算法,它的步驟如下:
- 對圖中的邊按照權重從小到大排序。
- 從圖中選取權重最小的邊,但必須保證這條邊不形成循環。
- 重複步驟2,直到圖中的節點都被生成樹連接起來。
Prim's algorithm 也是一種貪心算法,它的步驟如下:
- 從圖中任意一個節點開始,將其標記為已訪問。
- 從未訪問的節點中選擇權重最小的邊,將該邊連接的未訪問節點標記為已訪問。
- 重複步驟2,直到所有節點都被標記為已訪問。
兩種算法都可以找到最大生成樹,但Kruskal's algorithm 通常適用於邊的數量較多的圖,而Prim's algorithm 則適用於節點的數量較多的圖。