最小生成树(Kruskal和Prim算法)
生活随笔
收集整理的這篇文章主要介紹了
最小生成树(Kruskal和Prim算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、先再次明確關于圖的幾個概念定義:
- 連通圖:在無向圖中,若任意兩個頂點vivi與vjvj都有路徑相通,則稱該無向圖為連通圖。
- 強連通圖:在有向圖中,若任意兩個頂點vivi與vjvj都有路徑相通,則稱該有向圖為強連通圖。
- 連通網:在連通圖中,若圖的邊具有一定的意義,每一條邊都對應著一個數,稱為權;權代表著連接連個頂點的代價,稱這種連通圖叫做連通網。
- 生成樹:一個連通圖的生成樹是指一個連通子圖,它含有圖中全部n個頂點,但只有足以構成一棵樹的n-1條邊。一顆有n個頂點的生成樹有且僅有n-1條邊,如果生成樹中再添加一條邊,則必定成環。
- 最小生成樹:在連通網的所有生成樹中,所有邊的代價和最小的生成樹,稱為最小生成樹。
二、Kruskal算法
此算法可以稱為“加邊法”,初始最小生成樹邊數為0,每迭代一次就選擇一條滿足條件的最小代價邊,加入到最小生成樹的邊集合里。
示意圖:
動態圖:
三、Prim算法
此算法可以稱為“加點法”,每次迭代選擇代價最小的邊對應的點,加入到最小生成樹中。算法從某一個頂點s開始,逐漸長大覆蓋整個連通網的所有頂點。
1.圖的所有頂點集合為V;初始令集合u={s},v=V?u;
2.在兩個集合u,v能夠組成的邊中,選擇一條代價最小的邊(u0,v0),加入到最小生成樹中,并把v0并入到集合u中。
3.重復上述步驟,直到最小生成樹有n-1條邊或者n個頂點為止。
示意圖:
動態圖:
參考文章
參考視頻
總結
以上是生活随笔為你收集整理的最小生成树(Kruskal和Prim算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最小生成树与最短路径的区别以及实现方法
- 下一篇: 基于Redis的分布式锁实现