最小生成樹

一,基本的定義:

在一給定的無向圖G=(V,E)中,(u,v)代表連接頂點u與頂點v的邊,而w(u,v)代表邊的權重,若存在T爲E的子集且爲無循環圖,使得的w(T)最小,則T爲G的最小生成樹(最小權重樹)。

最小生成樹可以用Krukal算法或Prime算法求出。

二,算法的描述:

prime算法簡述

1)輸入:一個加權連通圖,其中頂點爲v,邊集合爲E;

2)初始化:Vnew={x},其中x爲集合V中的任意一節點,Enew={}爲空;

3)重複下列操作,直到Vnew=V;

a再集合E中選取權值最小的邊<u,v>,其中u爲集合Vnew中的元素,而不是在Vnew集合當中,並且v∈V(如果存在有多條邊滿足當前描述條件即具有相同權值的邊,則可任意選擇其中之一);

b,將v加入Vnew中,將<u,v>邊加入集合Enew中;

4)輸出:使用Vnew和Enew來描述所得到的最小生成樹。


Krukal算法簡述:

假設WN=(V,{E})是一個含有n個頂點的連通網,則按照克魯斯卡爾算法構造最小生成樹的過程爲:先構造一個只含n個頂點,而邊集爲空的子圖,若將該子圖中各個頂點看成是個樹上的根節點,則他是一個含有n棵樹的一個森林。之後,從網的變集E中選取一條權值最小的邊,若該條邊的兩個頂點分屬不同的樹,則將其加入子圖,即將這兩個頂點分別所在的兩棵樹合成一棵樹,反之,若該條邊的兩個頂點已經落在一棵樹上,則不可取,而應該取下一條權值最小的邊再試,直到森林中中有一棵樹,也即子圖中含有n-1條邊爲止。



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