構建最小生成樹普利姆演算法和克魯斯卡爾演算法 P C

2022-09-04 19:54:12 字數 806 閱讀 3500

普利姆演算法和克魯斯卡爾演算法的思想可以歸為貪心演算法即:以每次區域性最優解最後得全域性最優解。

相同點:

都適用於無向圖。

都是用了貪心思想    

不同點:

普利姆演算法是頂點優先,克魯斯卡爾是邊優先。二者應對不同情況效率不同。

普利姆演算法平均時間複雜度為o(n^2),是頂點數的平方。

克魯斯卡爾演算法平均時間複雜度取決於選用的排序演算法,是和邊數相關的。

普利姆演算法分析如下:

for (int k = 0; k < g.n; k++) }//

將 min_index 點併入

vset[min_index] = 1;

//維護lowcost陣列

for (int j = 0; j < g.n; j++)

}}

克魯斯卡爾演算法運用並查集工具判斷是否形成迴路。 並查集本質是在乙個陣列存了一棵二叉樹,通過查詢不同子節點的根節點判斷是否會形成迴路。

//

並查集工具

public

int getroot(int

a)  

returna;}

//定義邊的類 包含邊的左節點有節點和邊的長度

class

edge

//初始化並查集工具用到的陣列

for (int i = 0; i < g.n; i++)

//將邊按照從小到大順序排列

sort(edge edges, g.e);

for (int i = 0; i < g.e; i++)

}

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

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

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

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

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

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