描述:假設N=(V,{E})是一個連通網,U是頂點集V的一個非空子集。若(u,v)是一條具有最小權值(代價)的邊,其中u∈U,v∈V-U,則必存在一棵包含邊(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)的一棵最小生成樹。由此和假設矛盾。
Prim算法:
假設 N=(V,{E})是連通網,TE是N上最小生成樹中邊的集合。算法從U={uo}(uo∈V),TE{}開始,重復執行下述操作:在所有u∈U,v∈V-U的邊(u,v)∈E中找一條代價最小的邊(uo,vo)並入集合TE,同時vo並入U,直至U=V為止。此時TE中必有n-1條邊,則T=(V,{TE})為N的最小生產數。
Kruskal算法:
假設連通網N=(V,{E}),則令最小生成樹的初始狀態為只有n個頂點而無邊的非連通圖T=(V,{}),圖中每個頂點自成一個連通分量。在E中選擇代價最小的邊,若該邊依附的頂點落在T不同的連通分量上,則將此邊加入到T中,否則舍去此邊而選擇下一條代價最小的邊。依次類推,直至T中所有頂點都在同一連通分量上為止。