最小生成樹之Kruskal演算法分析

2021-10-03 08:15:24 字數 857 閱讀 4654

設g=(v,e)是無向連通帶權圖,即乙個網路。圖中每一條邊(u,v)的權是c[u][v],表示聯通u與v的代價。

如果g的子圖t是一棵包含g的所有頂點的樹,則稱t為g的生成樹。生成樹上各邊權的總和稱為該生成樹的耗費。在g的所有生成樹中,耗費最小的生成樹稱為g的最小生成樹:

貪心演算法可以設計出構造最小生成樹的有效演算法。

primkruskal演算法都是應用貪心演算法設計的。

kruskal演算法基本思想

kruakal演算法的基本思想是每次都選取不會形成環的權值最小的邊,但與prim不同的是,kruskal演算法引入了連通分量來判斷是否形成環。所以難點在於如何判斷兩個頂點是否屬於同一連通分量。我們可以用並查集的思想,直接將同一連通分量的兩個頂點的根father連在一起。也就是說當新的一條邊加入時,判斷它的兩個頂點是否屬於乙個連通分量,即判斷他們的根father是否相同。

遍歷排序好的邊集v進行如下貪心選取,直到選取邊數為n-1時

下面以繪圖的形式來演示kruskal演算法的具體過程

int

kruskal()

}return sumweight;

//返回權重和

}

kruaskal演算法的時間複雜度與網中的邊數有關,適合於稀疏圖,時間複雜度為o(mlogm)。

最小生成樹之Kruskal演算法

最小生成樹 kruskal演算法描述 該演算法是基於貪心的思想得到的。首先我們把所有的邊按照權值先從小到大排列,接著按照順序選取每條邊,如果這條邊的兩個端點不屬於同一集合,那麼就將它們合併,直到所有的點都屬於同乙個集合為止。合併頂點可以利用並查集,換而言之,kruskal演算法就是基於並查集的貪心演...

最小生成樹之kruskal演算法

先構造乙個只含 n 個頂點 而邊集為空的子圖,把子圖中各個頂點看成各棵樹上的根結點,之後,從網的邊集 e 中選取一條權值最小的邊,若該條邊的兩個頂點分屬不同的樹,則將其加入子圖,即把兩棵樹合成一棵樹,反之,若該條邊的兩個頂點已落在同一棵樹上,則不可取,而應該取下一條權值最小的邊再試之。依次類推,直到...

最小生成樹之kruskal演算法

克魯斯卡爾 kruskal 演算法過程 構造最小生成樹 u,te 1.置u的初值等於v 即包含有g中的全部頂點 te的初值為空集 即圖t中每乙個頂點都構成乙個連通分量 2.將圖g中的邊按權值從小到大的順序依次選取 若選取的邊未使生成樹t形成迴路,則加入te 否則捨棄,直到te中包含 n 1 條邊為止...