普利姆演算法和克魯斯卡爾演算法的思想可以歸為貪心演算法即:以每次區域性最優解最後得全域性最優解。
相同點:
都適用於無向圖。
都是用了貪心思想
不同點:
普利姆演算法是頂點優先,克魯斯卡爾是邊優先。二者應對不同情況效率不同。
普利姆演算法平均時間複雜度為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 普里姆演算法 圖的存貯結構採用鄰接矩陣.此方...