數據結構——最小生成樹

最小生成樹

1、最小生成樹的基本概念

生成樹:一個連通圖的最小連通子圖稱作該圖的生成樹。有n個結點的連通圖的生成樹有n個結點和n-1條邊。
       一個有n個結點的連通圖的生成樹是原圖的極小連通子圖,它包含原圖中的所有n個結點,並且有保持圖連通的最少的邊。
       由生成樹的定義可知:
       ①若在生成樹中刪除一條邊,就會使該生成樹因變成非連通圖而不再滿足生成樹的定義;
       ②若在生成樹中增加一條邊,就會使該生成樹因存在迴路而不再滿足生成樹的定義;
       ③一個連通圖的生成樹可能有許多。
總結:從生成樹的定義顯然可以證明,對於有n個結點的無向連通圖,無論它的生成樹的形狀如何,一定有且只有n-1條邊。
   
       如果無向連通圖是一個帶權圖,那麼它的所有生成樹中必有一棵樹的權值總和最小的生成樹,這棵生成樹稱爲最小代價生成樹,簡稱最小生成樹
       從最小生成樹的定義可知,構造有n個結點的無向連通帶權圖的最小生成樹,必須滿足以下三個條件:
       ①構造的最小生成樹必須包括n個結點;
       ②構造的最小生成樹中有且只有n-1條邊;
       ③構造的最小生成樹中不存在迴路。
       構造最小生成樹的方法有許多種,典型的構造方法有兩種,一種稱作普利姆(Prim)算法,另一種稱作克魯斯卡爾(Kruskal)算法。

2、普利姆算法思想

       假設G=(V,E)爲一個帶權圖,其中V爲帶權圖中結點的集合,E爲帶權圖中邊的權值集合。設置兩個新的集合U和T,其中U用於存放帶權圖G的最小生成樹的結點的集合,T用於存放圖G的最小生成樹的邊的集合。
       普利姆算法的思想是:令集合U的初值爲U={u0}(即假設構造最小生成樹時從結點u0開始),集合T的初值爲T={}。從所有結點u∈U和結點v∈V-U的帶權邊中算出具有最小權值的邊(u,v),將結點v加入集合U中,將邊(u,v)加入集合T中。如此不斷重複,當U=V時則最小生成樹構造完畢。此時集合U中存放着最小生成樹結點的集合,集合T中存放着最小生成樹邊的權值集合。具體的構造過程如下圖所示。

3、克魯斯卡爾算法

       不同於普利姆算法,克魯斯卡爾算法是一種按照帶權圖中邊的權值的遞增順序構造最小生成樹的方法。
       克魯斯卡爾算法是:設無向連通帶權圖G=(V,E),其中V爲結點的集合,E爲邊的集合。設帶權圖G的最小生成樹T由結點集合和邊的集合構成,其初值爲T=(V,{}),即初始時最小生成樹T只由帶權圖G中的結點集合組成,各結點之間沒有一條邊。這樣,最小生成樹T中的各個結點各自構成一個連通分量。然後,按照邊的權值遞增的順序考察帶權圖G中的邊集合E中的各條邊。若被考察的邊的兩個結點屬於T的兩個不同的連通分量,則將此邊加入到最小生成樹T,同時把兩個連通分量連接爲一個連通分量;若被考察的邊的兩個結點屬於T的同一個連通分量,則將此邊捨去。如此下去,當T中的連通分量個數爲1時,T中的該連通分量即爲帶權圖G的一棵最小生成樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章