最小生成樹(MST)的性質及演算法 [轉】
轉自:
最小生成樹性質1:設G=(V,E)是一個連通網路,U是頂點集V的一個真子集。若(u,v)是G中所有的一個端點在U(u∈U)裡、另一個端點不在U(即v∈V-U)裡的邊中,具有最小權值的一條邊,則一定存在G的一棵最小生成樹包括此邊(u,v)。
證明:
為方便說明,先作以下約定:
①將集合U中的頂點看作是紅色頂點,②而V-U中的頂點看作是藍色頂點,③連線紅點和藍點的邊看作是紫色邊,④權最小的紫邊稱為輕邊(即權重最"輕"的邊)。於是,MST性質中所述的邊(u,v)就可簡稱為輕邊。
用反證法證明MST性質:
假設G中任何一棵MST都不含輕邊(u,v)。則若T是G的一棵MST,則它不含此輕邊。
由於T是包含了G中所有頂點的連通圖,所以T中必有一條從紅點u到藍點v的路徑P,且P上必有一條紫邊(u',v')連線紅點集和藍點集,否則u和v不連通。當把輕邊(u,v)加入樹T時,該輕邊和P必構成了一個迴路。刪去紫邊(u',v')後迴路亦消除,由此可得另一生成樹T'。
T'和T的差別僅在於T'用輕邊(u,v)取代了T中權重可能更大的紫邊(u',v')。因為w(u,v)≤w(u',v'),所以 w(T')=w(T)+w(u,v)-w(u',v')≤w(T)
故T'亦是G的MST,它包含邊(u,v),這與假設矛盾。
所以,MST性質成立。
最小生成樹性質2:其最大邊權為生成樹中最大邊權最小的。
證明
反證法:假設Ta為一棵最小生成樹,Tb為一棵非最小生成樹且其最大邊權小於Ta的最大邊權。
e是最小生成樹Ta的最大邊,e將最小生成樹Ta分為連通的2個部分A->B,Tb的連線A->B的邊權為e1,e1<=eb(Tb上最大邊權)<e,即A->B之間存在一條權值比e更小的連通A和B的邊,故Ta不是最小生成樹,矛盾,故假設不成立。
==========================================================================
Prim演算法與Kruskal演算法是尋找最小生成樹的經典方法,兩者皆為貪心法,一次“生成”一條“安全邊”,如下所示:
GENERIC-MST-FUNCTION (G,w)
1 T := 空集合
2 while T 還不是生成樹
3 do 找出對 T 來說是不會形成cycle,且權重最低的邊 (u, v)
4 T := T U {(u, v)}
5 return T