Prim演算法和Kruskal演算法的區別
在這篇文章中,我們將瞭解Prim演算法和Kruskal演算法之間的區別。
Kruskal演算法用於最小生成樹 (MST)
- 給定一個連通且無向的圖,該圖的生成樹是連線所有頂點的子圖,且該子圖是一棵樹。
- 一個圖可以有多棵生成樹。
- 對於一個加權的、連通的、無向的圖,最小生成樹 (MST)(也稱為最小權重生成樹)是一棵生成樹,其權重小於或等於所有其他生成樹的權重。
- 生成樹的權重是透過將與生成樹中每條邊關聯的權重加起來得到的。
- 最小生成樹可以從圖中權重最小的頂點構建。
- 每個節點只遍歷一次。
- 它在稀疏圖中執行速度很快。
- 時間複雜度為 O(E log V),其中 V 是頂點數。
- 它也可以處理不連通的元件。
使用Kruskal演算法查詢MST的步驟
- 按關聯權重升序對邊進行排序。
- 選擇最小的邊。
- 檢查它是否與到目前為止形成的生成樹構成環。
- 如果沒有形成環,則必須包含此邊。
- 否則,可以將其丟棄。
- 重複步驟2、3、4,直到生成樹包含V-1條邊。
Prim演算法最小生成樹 (MST)
- 這類似於Kruskal演算法,即它是一種貪心演算法。
- 它從一個空的生成樹開始。維護兩組頂點。
- 第一組將包含已包含在MST中的頂點,而另一組將包含尚未包含的頂點。
- 在每一步中,演算法都會考慮所有連線這兩組的邊。然後,它從這些邊中選擇權重最小的邊。
- 在此步驟之後,演算法移動到包含MST的集合的邊的另一端點。
- 最小生成樹可以從圖中的任何頂點構建。
- 一個節點被多次遍歷以獲得最小距離值。
- 它的時間複雜度為 O(V2),其中 V 是頂點數。使用斐波那契堆可以將此時間複雜度提高到 O(E + log V)。
- 它在稠密圖中執行速度很快。
- 它給出連通分量,並且僅適用於連通圖。
使用Prim演算法查詢MST的步驟
- 建立一個mstSet,用於跟蹤已包含在MST中的頂點。
- 為輸入圖的所有頂點分配一個鍵值。
- 鍵值最初設定為“INFINITE”。
- 為第一個頂點分配鍵值0,以便可以首先選擇它。
- 當mstSet不包含所有頂點時,遵循以下步驟。
- 選擇一個不在mstSet中且具有最小鍵值的頂點“u”。
- 此“u”現在包含在mstSet中。
- 更新“u”的所有相鄰頂點的鍵值。
- 這可以透過遍歷所有相鄰頂點來完成。
- 對於每個相鄰頂點“v”,如果邊“u”-“v”的權重小於“v”的先前鍵值,則將鍵值更新為“u-v”的權重。
廣告