首頁 >後端開發 >C++ >為什麼Prim和Kruskal的最小生成樹演算法在有向圖中失敗?

為什麼Prim和Kruskal的最小生成樹演算法在有向圖中失敗?

王林
王林轉載
2023-09-02 17:29:07680瀏覽

為什麼Prim和Kruskal的最小生成樹演算法在有向圖中失敗?

Prim的方法和Kruskal的演算法是在無向圖中定位MST(最小生成樹)的兩種常見方法。然而,這些技術不能為有向圖產生正確的MST。這是因為有向圖不適合Prim和Kruskal演算法所使用的基本假設和方法。

Prim 演算法

首先,有Prim演算法,它涉及以貪婪的方式向擴展的最小生成樹添加邊,直到所有頂點都被覆蓋。 MST內部的頂點透過具有最低權重的邊與MST外部的頂點相連。由於無向圖中的所有邊都可以以任意方向移動,因此從MST到外部頂點的最短路徑很容易找到。然而,在有向圖中,邊總是指向一個方向,可能沒有直線連接MST和外部頂點。這與Prim演算法的基本原則相矛盾。

這樣的一個例子是有向邊 (u,v),它將 MST 中的頂點 u 連接到 MST 外部圖中的頂點 v。由於Prim方法中的MST必須透過直接邊連接到外部頂點,所以邊(u,v)被忽略,導致MST可能不準確或不充分。

Kruskal的方法

克魯斯卡爾方法是一種加權邊排序技術,它重複地將不產生循環的最小權重邊加入圖中。此方法最適合無向圖,因為邊緣指向兩個方向,因此可以輕鬆偵測到循環。由於邊的方向在有向圖中很重要,因此循環的概念變得更加微妙。 Kruskal 的方法忽略了這種複雜性。

假設您正在建立的 MST 中有一個定向循環。當應用於有向圖時,克魯斯卡爾的技術可以產生包含有向循環的樹。此方法會產生不準確的 MST,因為其基於無向邊的循環偵測機制無法正確捕捉有向圖中的循環。

結論

可以得出結論,雖然 Prim 和 Kruskal 的技術對於在無向圖中定位 MST 很有用,但它們不適用於有向圖。這些方法產生不準確或不充分的 MST,因為它們所依賴的基本假設和機制在有向圖的設定中不成立。有向圖有其獨特的屬性和複雜性,因此採用有向圖特定技術(例如 Chu−Liu/Edmonds 方法)來獲得最小生成樹非常重要。

以上是為什麼Prim和Kruskal的最小生成樹演算法在有向圖中失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除

相關文章

看更多