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

2021-10-22 04:57:06 字數 764 閱讀 1475

問題

 1舉乙個例項,畫出採用prim演算法構造最小生成樹的過程,並按實驗報告模板編寫演算法。

 2舉乙個例項,畫出採用kruskal演算法構造最小生成樹的過程,並按實驗報告模板編寫演算法。

[描述演算法問題,首選形式化方式(數學語言),其次才是非形式化方式(日常語言)]

2. 解析

prim演算法,就是從頂點出發,每次加入一條最小權的邊和對應的頂點,逐漸生成樹。

kruskal演算法,就是將各條邊,按照從小到大排序後,參考聯連通分量順序構造,以生成最小樹。

[問題的理解和推導,可用電子版直接在此編寫,也可用紙筆推導,拍照嵌入本文件]

3. 設計

所有的點集合v分為 已經放入最小生成樹集合的s和未放入的v-s,每次在v-s中選擇乙個距離s最近的點放入到s中,直到所有的點都放入s。

[核心偽**]

4. 分析

prim 演算法的時間複雜度為 o(n^2 ),與網中的邊數無關,因此適用於求邊稠密的網的最小生成樹。

kruskal 演算法需對各條邊按權值進行排序,時間複雜度為 o(n)(n 為網中邊的數目),因此適用於求邊稀疏的網的最小生成樹。

[演算法複雜度推導]

5. 原始碼

[github原始碼位址]

最小生成樹 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 如...