寫在前面
最小生成樹的引出
假設要在n個城市之間建立通信聯絡網,則連通n個城市需要n-1條線路。在這種情況下,我們自然需要考慮一個問題,如何在最節省經費的條件下建立這個網絡?
很自然地我們會想到,將各個城市之間的線路開銷轉化為權重,要想找到最節省經費的方案,就需要找到能夠連通所有城市且權重最小的連通線路。
因此,我們需要選擇一顆生成樹,使得該生成樹總耗費最小,也就是用最小的代價構建這條連通網。我們稱這樣的網絡為:最小代價生成樹(簡稱:最小生成樹)。
本文結構
本文從MST性質的定義和證明方面為讀者解度最小生成樹兩個常見算法的前置理論性質。
普里姆(Prim)算法和克魯斯卡爾(Kruskal)算法都是利用了MST性質的算法
建議讀者在在理解了普里姆(Prim)算法和克魯斯卡爾(Kruskal)算法之后再閱讀此文
利用得到的最小生成樹在回過頭來理解MST會更加簡單。
MST性質
MST性質的定義
假設N=(V,{E})是一個連通網,U是頂點集V的一個非空子集。
若(u,v)是一條既有最小權值(代價)的邊,其中u∈U,v∈V,則必存在一顆包含邊(u,v)的最小生成樹。
證明
證明方法
可以用反證法證明。假設網N的任何一顆最小生成樹都不包含(u,v)。設T是連通網上的一顆最小生成樹,當將邊(u,v)加入到T中時,由生成樹的定義,T中必存在一條包含(u,v)的回路。
另一方面,由於T是生成樹,則在T上必存在另外一條(u',v'),其中u'∈U,v'∈V-U,且u與u',v與v'均有路徑相通。
刪去邊(u',v')即可消除上述回路,同時得到另外一顆生成樹T'。因為(u,v)的代價不高於(u'v'),則T'的代價亦不高於T,T'是一顆包含(u,v)的最小生成樹。與假設假設矛盾。
舉個例子
現在,給出一個連通圖:

眾所周知,這樣一給連通網的最小生成樹為:

那么可以按照如下方式對MST進行證明:

