最小生成树

**最小生成樹**（minimum spanning tree，MST）是**最小權重生成樹**（minimum weight spanning tree）的簡稱，是一副連通加權無向圖中一棵權值最小的生成樹。

在一給定的無向圖 $G=(V,E)$ 中， $(u,v)$ 代表連接頂點 u 與頂點 v 的邊（即 $(u,v)\in E$ ），而 $w(u,v)$ 代表此邊的權重，若存在 T 為 E 的子集（即 $T\subseteq E$ ）且 (V, T) 為樹，使得：

　
: $w(T)=\sum _{(u,v)\in T}w(u,v)$

的 w (T) 最小，則此 T 為 G 的最小生成樹。

一個連通圖可能有多個生成樹。當圖中的邊具有權值時，總會有一個生成樹的邊的權值之和小於或者等於其它生成樹的邊的權值之和。廣義上而言，對於非連通無向圖來說，它的每一連通分量同樣有最小生成樹，它們的並被稱為**最小生成森林**。

以有線電視電纜的架設為例，若只能沿著街道佈線，則以街道為邊，而路口為頂點，其中必然有一最小生成樹能使佈線成本最低。

## 相關性質

### 存在個數

最小生成樹在一些情況下可能會有多個。例如，當圖的每一條邊的權值都相同時，該圖的所有生成樹都是最小生成樹。

#### 唯一性

如果圖的每一條邊的權值都互不相同，那麼最小生成樹將只有一個。這一定理同樣適用於最小生成森林。

證明：

> 
> 假設圖 $G$ 為每條邊權值互不相同的連通圖，且有兩個不同的最小生成樹 $T$ 和 $T'$ 。
> 
> 則 $T$ 中必然存在一些在 $T'$ 中並不存在的邊，取其中一條這樣的邊 $e_{0}$ 。
> 
> 因為 $T'$ 是最小生成樹，所以若往 $T'$ 中添加邊 $e_{0}$ ，則將會出現環路。（因為有 $m$ 個頂點的樹有且僅有 $m-1$ 條邊）
> 
> 同時可知，如果從 $T$ 中刪除邊 $e_{0}$ ，則 $T$ 將分為互不連通的兩個連通分量。因為 $e_{0}\notin T'$ ，所以 $T'$ 中必然有其他的邊連接這兩個連通分量。且將 $e_{0}$ 加入 $T'$ 後形成的環路中，除了 $e_{0}$ 外至少有另一條連接 $T$ 中刪除 $e_{0}$ 後的這兩個連通分量的邊。取其中一條這樣的邊，記作 ${e_{0}}'$ 。此時若將 ${e_{0}}'$ 加入 $T$ ，則可連接從 $T$ 中刪除 $e_{0}$ 後得到的兩個連通分量，並形成一棵不同的生成樹。
> 
> 因為 $G$ 中所有邊的權值互不相同，所以關於 $e_{0}$ 和 ${e_{0}}'$ 的權重大小關係，可能有以下兩種情況之一：
> 
> 1. 若 $e_{0}<{e_{0}}'$ ，則可從 $T'$ 中刪除 ${e_{0}}'$ 並加入 $e_{0}$ ，從而得到一棵總權值更小的生成樹。這和 $T'$ 是最小生成樹相矛盾。
> 2. 若 $e_{0}>{e_{0}}'$ ，則可從 $T$ 中刪除 $e_{0}$ 並加入 ${e_{0}}'$ ，從而得到一棵總權值更小的生成樹。同樣，這和 $T$ 是最小生成樹相矛盾。
> 
> 綜上，若 $G$ 各邊權重互不相等，則不可能存在兩棵互不相同的最小生成樹。即 $G$ 的最小生成樹是唯一的。
> 
> 

### 邊的權值之和最低的子圖

如果圖的邊的權值都為正數，那麼最小生成樹就是該圖的所有包含所有頂點的子圖中權值最低的連通子圖。

### 環定理

對於連通圖中的任意一個環 $C$ ：如果 $C$ 中有邊 $e$ 的權值大於該環中任意一個其它的邊的權值，那麼這個邊不會是最小生成樹中的邊

證明： 
假設 $e$ 屬於最小生成樹 $T1$ ，那麼將 $e$ 刪去將會使得 $T1$ 變為兩個樹。因為環 $C$ 必然還存在另一橫切邊ｆ可以連接兩個子樹形成生成樹 $T2$ ，且由於 $f$ ＜ $e$ ，生成樹 $T2$ 權值更小，與 $T1$ 是最小生成樹矛盾。

### 割定理

在一幅連通加權無向圖中，給定任意的割，如有一條割邊的權值嚴格小於所有其他割邊，則這條邊必然屬於圖的最小生成樹。

證明： 
令 $e$ 為權重最小的割邊，假設 $T$ 為圖的最小生成樹，且 $T$ 不包含 $e$ 。那麼如果將 $e$ 加入 $T$ ，得到的圖必然含有一條經過 $e$ 的環，且這個環也含有另一條割邊 -- 設為 $e'$ ， $e'$ 的權重必然大於 $e$ ，那麼用 $e$ 替換 $e'$ 可以形成一個權值小於 $T$ 的生成樹，與 $T$ 為最小生成樹矛盾。所以假設不成立，因此 $T$ 必然包含 $e$ 。。

### 最小權值邊

如果圖的具有最小權值的邊只有一條，那麼這條邊包含在任意一個最小生成樹中。

證明： 
假設該邊 $e$ 沒有在最小生成樹 $T$ 中，那麼將 $e$ 加入 $T$ 中會形成環，用 $e$ 替換環中的任意一條權值更大的邊，將會形成權值更小的生成樹，與題設矛盾。

## 相關演算法

### 歷史簡介

計算稠密圖的最小生成樹最早是由羅伯特・普里姆在 1957 年發明的，即 Prim 演算法。之後艾茲赫爾・戴克斯特拉也獨自發明了它。但該演算法的基本思想是由沃伊捷赫・亞爾尼克於 1930 年發明的。所以該演算法有時候也被稱為 Jarník 演算法或者 Prim-Jarník 演算法。20 世紀 70 年代，優先佇列發明之後很快被用在了尋找稀疏圖中的最小生成樹上。1984 年，麥可・傅利曼和羅伯特・塔揚發明了斐波那契堆，Prim 演算法所需要的執行時間在理論上由 $E\log E$ 提升到了 $E+V\log V$ 。約瑟夫・克魯斯卡爾在 1956 年發表了他的演算法，在他的論文中提到了 Prim 演算法的一個變種，而奧塔卡爾・布盧瓦卡在 20 世紀 20 年代的論文中就已經提到了該變種。M.Sollin 在 1961 年重新發現了該演算法，該演算法後成為實現較好漸進效能的最小生成樹演算法和並列最小生成樹演算法的基礎。

以下各演算法介紹中， $E$ 表示圖的邊數， $V$ 表示圖的頂點數。

### Borůvka 演算法

第一個用於尋找最小生成樹的演算法由捷克科學家奧塔卡爾・布盧瓦卡提出，即 Borůvka 演算法。

### Prim 演算法

Prim 演算法的每一步都會為一棵生長中的樹添加一條邊，該樹最開始只有一個頂點，然後會添加 $V-1$ 個邊。每次總是添加生長中的樹和樹中除該生長的樹以外的部碎形成的切分的具有最小權值的橫切邊。

Prim 演算法的時間複雜度為 $O(E+V\log V)$ 。

### Kruskal 演算法

按照邊的權重順序（從小到大）將邊加入生成樹中，但是若加入該邊會與生成樹形成環則不加入該邊。直到樹中含有 $V-1$ 條邊為止。這些邊組成的就是該圖的最小生成樹。

Kruskal 演算法的時間複雜度為 $E\log E$ 。

### 更快的演算法

一些研究者希望可以找出更為高效的演算法，在這方面也有了一定的成果。
Karger，Klein & Tarjan (1995) 針對邊的權值可以成對比較的特殊模型提出了一個基於 Borůvka 演算法和翻轉刪除演算法的可以線上性時間內解決最小生成樹的演算法。

最快的非隨機比較演算法是由伯納德・沙澤勒提出的。該演算法依賴於 soft heap 這樣一個類似於優先級佇列的資料結構 。該演算法的時間複雜度為 $O(E\alpha (E,V))$ 。 $\alpha $ 就是阿克曼函數反函數， $\alpha $ 的增長速度非常慢，對於一般的數值來說，其值很難超過 5，所以該演算法的複雜度可以近似看成是線性時間。

### 線性時間的最小生成樹演算法

目前，既不能證明不存在能線上性時間內得到任意圖的最小生成樹的演算法，也未能發明能夠線上性時間內計算稀疏圖的最小生成樹的演算法。

## 相關問題

k - 最小生成樹：圖中包含 k 個頂點的所有子圖的所有最小生成樹中權值最小的生成樹。

歐幾里得最小生成樹是一個用歐幾里得距離來表示權值的連通加權圖的最小生成樹。

方格線最小生成樹是一個用曼哈頓距離來表示權值的連通加權圖的最小生成樹。

容量最小生成樹是一棵樹且其每個節點的子樹的容量都不大於 $C$ 。解決該問題是 NP 困難的。但是伊薩・威廉士和夏爾馬以及提出了可以在接近多項式時間內解決該問題的啟發式。

度受限最小生成樹是一棵樹，其每一個頂點連接的頂點數都不超過 d。對一些特定的 d 值，該問題類似於旅行推銷員問題。該問題也是 NP 困難的。

對有向圖來說，其與最小生成樹類似的圖處理問題叫做最小樹形圖問題。

**最大生成樹**是一棵比其它所有生成樹都要大或者相等的生成樹。其解決方法類似於最小生成樹演算法。求解最大生成樹的演算法在自然語言處理以及條件隨機場這些問題上起到很大的作用。

**動態最小生成樹**是在已經計算完一個圖的最小生成樹後動態改變一些邊的取值或刪除 / 添加一些點或者邊，求解新圖的最小生成樹。

## 注釋

**^1** ：用一條邊連結樹中的任意兩個頂點都會產生一個新的環。

## 參考

## 參考文獻

* Otakar Boruvka on Minimum Spanning Tree Problem (translation of the both 1926 papers, comments, history) (2000) （頁面存檔備份，存於網際網路檔案館） Jaroslav Nešetřil, Eva Milková, Helena Nesetrilová. (Section 7 gives his algorithm, which looks like a cross between Prim's and Kruskal's.)
* Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. _Introduction to Algorithms_, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Chapter 23: Minimum Spanning Trees, pp. 561–579.
* Eisner, Jason (1997). State-of-the-art algorithms for minimum spanning trees: A tutorial discussion （頁面存檔備份，存於網際網路檔案館）. Manuscript, University of Pennsylvania, April. 78 pp.
* Kromkowski, John David. "Still Unmelted after All These Years", in Annual Editions, Race and Ethnic Relations, 17/e (2009 McGraw Hill) (Using minimum spanning tree as method of demographic analysis of ethnic diversity across the United States).

## 外部連結

* Implemented in BGL, the Boost Graph Library （頁面存檔備份，存於網際網路檔案館）
* The Stony Brook Algorithm Repository - Minimum Spanning Tree codes （頁面存檔備份，存於網際網路檔案館）
* Implemented in QuickGraph for .Net