2012-03-03 56 views
3

如此看來,在確定邊緣是否處於最小生成樹可以降低到的邊緣是否是一些週期的最重的邊緣問題。我知道如何使用DFS檢測邊緣是否處於循環中,但是如何確定它是否是該循環中最重的邊緣?是通過找到週期並選擇最重的邊緣嗎?檢測邊緣是否是在一個週期內最重的邊緣

+1

與週期的其他邊緣比較!你有什麼問題? – 2012-03-03 22:12:53

+0

是的,你的問題到底是什麼?你是否要求一種方法來尋找週期中最大的重量邊緣? – noMAD 2012-03-03 22:13:59

+1

但是可以存在指數級的包含給定邊的多個週期。給定任何一個單一的週期,你可以很容易地檢查這一點,但可能會有指數的許多週期檢查,這將使算法完全不可行。 – templatetypedef 2012-03-04 00:31:59

回答

5

假設所有的邊緣有不同的權重,簡單和優雅的公平算法,這樣做是做一個修改DFS。請注意,如果此邊緣在某個循環中是最重的邊緣,那麼如果要查看通過刪除比當前邊緣重的所有邊緣形成的圖形,則必須存在從邊緣端點返回到邊緣,因爲這條路徑與邊緣本身相結合形成一個循環,給定的邊緣是最重的邊緣。相反,如果沒有包含給定邊緣最重的邊的循環,那麼如果您要在該圖中從邊緣回到源搜索,您將無法返回到邊緣的來源,否則你可以完成它的一個循環。這提供了以下簡單的算法:在原始圖形中從邊緣端點返回到源,但是每當遇到比原始邊緣更重的邊緣時,請不要處理它(這會模擬將其從圖)。如果你的DFS從邊緣回到源頭,那麼你知道必須有一些循環的邊緣是最重的邊緣,如果沒有這樣的循環,那麼你將無法獲得回到邊緣的源頭。

在邊緣沒有明顯的情況下,你會做同樣的搜索同上,但你會刪除其重量大於或等於當前邊的權重所有邊緣。其原因是,如果在這個變換圖中存在從邊的末端到邊的開始的路徑,則知道事實上我們並沒有最終使用具有與原始邊緣,因此找到的任何路徑都可以完成到給定邊緣最重的週期。如果沒有路徑,則要麼

  1. 包含給定邊的每個週期有一些邊緣的嚴格比它更重,或
  2. 包含給定邊的每個週期有一定的優勢,具有相同的成本,因爲它。

在這兩種情況下,它不是在循環中最重的邊緣。

該算法的運行時間爲O(M + N),做一個標準DFS所需的時間。

希望這會有所幫助!

+0

我不同意你最重的定義(無論哪種情況),例如當我們搜索數組中的最大值時,我們並不尋找唯一的最大值。但是你的算法很好並且可以簡單修改。 – 2012-03-04 13:42:17

+0

@ SaeedAmiri-如果我沒有記錯,在MST有一個定理是說,如果一個邊緣是嚴格對一些週期最重的邊(不是並列爲最重,但實際上比一切更重),那麼邊緣不能在任何MST中。這就是我使用這個定義的原因。 – templatetypedef 2012-03-04 20:16:48

+0

不錯的算法!微小的挑選:第2段的結尾應該是「如果沒有路徑,那麼包含給定邊的每個循環都有一些邊(1)嚴格地比它重,或者(2)與它相同的成本」(即一些週期可以是一種方式,也可以是其他方式)。 – 2012-11-02 14:45:18