最小生成樹(普里姆演算法 克魯斯卡爾演算法)

2021-07-04 13:43:49 字數 1265 閱讀 3354

演算法

給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.

求最小生成樹的演算法

(1)克魯斯卡爾演算法

圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.

(2)普里姆演算法

圖的存貯結構採用鄰接矩陣.此方法是按各個頂點連通的步驟進行,需要用乙個頂點集合,開始為空集,以後將以連通的頂點陸續加入到集合中,全部頂點加入集合後就得到所需的最小生成樹 .

下面來具體講下:

克魯斯卡爾演算法

方法:將圖中邊按其權值由小到大的次序順序選取,若選邊後不形成迴路,則保留作為一條邊,若形成迴路則除去.依次選夠(n-1)條邊,即得最小生成樹.(n為頂點數)

第一步:由邊集陣列選第一條邊

第二步:選第二條邊,即權值為2的邊

第三步:選第三條邊,即權值為3的邊

第四步:選第四條邊,即權值為4的邊

第五步:選第五條邊

普里姆演算法

方法:從指定頂點開始將它加入集合中,然後將集合內的頂點與集合外的頂點所構成的所有邊中選取權值最小的一條邊作為生成樹的邊,並將集合外的那個頂點加入到集合中,表示該頂點已連通.再用集合內的頂點與集合外的頂點構成的邊中找最小的邊,並將相應的頂點加入集合中,如此下去直到全部頂點都加入到集合中,即得最小生成樹.

例在下圖中從1點出發求出此圖的最小生成樹,並按生成樹的邊的順序將頂點與權值填入表中.

———————>先寫出其鄰接矩陣

第一步:從①開始,①進集合,用與集合外所有頂點能構成的邊中找最小權值的一條邊

①——②權6

①——③權1 -> 取①——③邊

①——④權5

第二步:③進集合,①,③與②,④,⑤,⑥構成的最小邊為

①——④權5

③——⑥權4 -> 取③——⑥邊

第三步:⑥進集合,①,③,⑥與②,④,⑤構成的各最小邊

①——②權6

③——②權5

⑥——④權2 -> 取⑥——④邊

第四步:④進集合,①,③,⑥,④與②,⑤構成的各最小邊

①——②權6

③——②權5 -> 取③——②邊

⑥——⑤權6

第四步:②進集合,①,③,⑥,②,④與⑤構成的各最小邊

②——⑤權3 -> 取②——⑤邊

這也是在網上找到的乙個kruskal和prim構造過程圖,貼出來:

最小生成樹(普利姆演算法 克魯斯卡爾演算法)

給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.2 普里姆演算法 圖的存貯結構採用鄰接矩陣.此方...

最小生成樹(普利姆演算法 克魯斯卡爾演算法)

演算法 給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.2 普里姆演算法 圖的存貯結構採用鄰接矩...

最小生成樹(普利姆演算法 克魯斯卡爾演算法)

給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.2 普里姆演算法 圖的存貯結構採用鄰接矩陣.此方...