演算法 最小生成樹(Kruskal演算法)

2021-09-17 23:13:41 字數 750 閱讀 4901

kruskal演算法

input 圖g(v,e) ,權值函式w

output 最小生成樹所包含的邊

初始化返回邊集a為空

將輸入的邊權值按照遞增順序排序

將每個頂點建立起乙個集合

for (u,v)屬於e

if u,v不在同乙個集合中 //說明該邊不在同乙個連通圖中

將邊(u,v)新增到返回集合a中

合併set(u),set(v)   //合併集合u,v

return a

時間複雜度:o(nlogn)

排序需要o(nlogn),其餘各步驟時間複雜度均為o(n)

貪心選擇性:最小生成樹必然包含圖g中權值最小的邊(u,v)

設t為圖g的一棵最小生成樹,若其不包含邊(u,v),則將該邊新增到t中導致成環,選擇環中的另一條邊(x,y),將其刪除得到另一棵生成樹t1,易得w(t1) = w(t) - w(x,y) + w(u,v) < w(t).所以與t為最小生成樹矛盾,因此最小生成樹必然包含圖g中權值最小的邊(u,v)

優化子結構:原問題的優化解由子問題的優化解構成

假設t/(u,v) 不是g/(u,v)的最小生成樹,則一定存在乙個t1是g/(u,v)的最小生成樹,因此t2 = t1 + (u,v) 為g的最小生成樹,w(t2) = w(t1) + w(u,v) < w(t/(u,v)) + w(u,v) = w(t) 由此,t2為g的最小生成樹,與題設矛盾

最小生成樹 Prim演算法和Kruskal演算法

最小生成樹 3條構造最小生成樹的準則 只能使用該網路中的邊來構造最小生成樹 只能使用恰好n 1條邊來聯結網路中的n個結點 選用的這個n 1條邊不能構成迴路。mst性質 假設n v,是乙個連通網,u是頂點集合v的乙個非空子集。若 u,v 是一條具有最小值 代價 的邊,其中u屬於u,v屬於v u 即u對...

最小生成樹 Prim演算法和Kruskal演算法

轉於 prim演算法 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹。把 找到的邊的v加入u集合。如果u集合已有n個元素,則結束,否則繼續執行 其演算法的時間複雜度為o n 2 define maxn boolflag ...

最小生成樹 Prim演算法和Kruskal演算法

prim演算法 演算法簡單描述 1 輸入 乙個加權連通圖,其中頂點集合為v,邊集合為e 2 初始化 vnew 其中x為集合v中的任一節點 起始點 enew 為空 3 重複下列操作,直到vnew v a.在集合e中選取權值最小的邊,其中u為集合vnew中的元素,而v不在vnew集合當中,並且v v 如...