簡體   English   中英

無向圖和有向圖的最小生成樹算法有什么區別?

[英]What's the difference between the minimum spanning tree algorithm for undirected vs directed graphs?

無向圖 MST 算法(Prim 或 Kruskal)是有向 MST 算法(Edmond/Chiu)的一般形式嗎? 怎么找定向案例的MST源代碼這么難? 我們可以使用無向解來獲得有向圖中的 MST 嗎?

這與以下內容有關: 為什么不能在有向圖上使用 Prim 或 Kruskal 算法?

您問題的核心似乎是什么使在有向圖中找到 MST(技術上稱為最佳分支最小成本樹狀圖)不同,因此比在無向圖中找到 MST 更難。

由於cut 屬性, Prim 和 Kruskal 的算法都可以工作。 如果 G = (V, E) 是一個圖,那么對於 G 中的任何切割 (S, V - S),如果有一條最低成本邊 {u, v} 穿過那個切割,那么該邊必須屬於所有 MST不幸的是,這個性質在有向情況下不成立。 下面是一個反例:

      2
  A ----> B
  |      | ^
1 |  -99 | | 1
  |      v |
  +-----> C

這里,以 A 為根的最小成本樹狀是這個:

      2
  A ----> B
          |
      -99 |
          v
          C

然而,看看切割 ({A}, {B, C}) 穿過該切割的最低成本邊是邊 (A, C),但該邊不會出現在任何以 A 為根的最低成本樹狀結構中.

如果沒有 cut 屬性,Prim 算法和 Kruskal 算法都會失敗。 嘗試在此處給出的圖形上運行 Prim 算法,從節點 A 作為您包含的節點開始。 您將添加邊 (A, C),然后添加邊 (C, B),從而得到次優的樹狀光。 現在,嘗試在此處運行 Kruskal 算法。 您將首先添加邊 (B, C),然后添加邊 (A, C)。 不幸的是,這實際上不是樹狀,因為它沒有根節點。

尋找最小成本樹狀的標准算法 (Edmonds-Chu) 實際上可能在精神上更接近Boruvka 的算法 Boruvka 算法的工作原理是同時為每個節點選擇連接到該節點的成本最低的邊並將其添加到候選 MST。 然后您將所有以這種方式形成的 CC 收縮為單個節點並重復此過程,直到您擁有樹。

在無向情況下,只要邊權重不同,該算法就永遠不會引入循環(這是證明這一點的一個很好的練習),但在有向算法中並非如此。 上面給出的圖表就是一個很好的例子 - 如果你嘗試這個,你從 A 中選擇 (A, C),從 C 中選擇 (C, B),從 B 中選擇 (B, C),形成循環 (B, C) ,乙)。 Edmonds-Chu 算法使用的校正通過將這些循環之一收縮到單個節點中,然后在簡化圖中重復此過程並根據結果“解壓縮”循環來進行工作。 從這個意義上說,它類似於 Boruvka 的算法,但進行了適當的修改。

希望這可以幫助!

我找到了一些不錯的幻燈片,其中對差異進行了清晰明了的解釋,並附有清晰的數字和示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM