簡體   English   中英

為什么貝爾曼福特算法中的 |V|-1 次迭代保證最短路徑?

[英]Why Do |V|-1 Iterations In The Bellman Ford Algorithm Guarantee a Shortest Path?

令 V 為圖中的一組頂點。 我知道給定 |V| 的圖表沒有負循環的頂點,最短路徑總是有|V|-1條邊。 我仍然不太明白為什么檢查每條邊 |V|-1 次保證貝爾曼福特的算法將產生最短路徑。 有人可以幫助我更好地理解這一點嗎?

在第一階段(檢查每條邊一次),您考慮所有可能只有一條邊的最短路徑。 因此,如果最短路徑只有一條邊,您將在第一階段之后找到它。 (但你還不知道你找到了最短路徑。)

在檢查所有邊的第二階段之后,您將考慮兩條邊的所有潛在路徑,因為您考慮了已考慮路徑的一條邊的所有可能擴展。 因此,如果最短路徑最多有兩條邊,那么您將在第二階段之后找到它。

依此類推……如果最短路徑最多有V -1 條邊(確實如此),您將在V -1 階段之后找到它。

這是在松弛步驟中完成的。 在此步驟中,頂點距離會逐步更新。 直觀地說,這些更新會在整個圖中傳播:當您找到到一個節點的較短路徑時,它的鄰居也可能會從這條捷徑中受益。 在下一次迭代中,它們也會更新,依此類推。

但這種更新不能無限期地繼續下去。 它可以發生的最大次數恰好是|V| - 1 您可以將其可視化為從一個頂點傳播到所有其他頂點並返回源的更新路徑。 源本身當然不會找到通往自身的捷徑。

在我看來,有必要做一些數學來完全理解它(盡管其他答案已經給出了一些直覺)。 讓我們通過歸納證明以下陳述:

讓 s 是源頂點, u 是有向圖中的任何其他頂點。 在貝爾曼福特算法的 i 次迭代之后:

  1. 如果 d[u] 不是無窮大,它等於從 s 到 u 的某個路徑的長度。
  2. 如果有一條從 s 到 u 的路徑最多有 i 條邊,則 d[u] 最多是從 s 到 u 的最短路徑的長度,最多有 i 條邊。

證明

基本情況是 i=0(在任何迭代之前)。 此時,對於所有 u,d[s] = 0 和 d[u] = ∞。 很明顯,(1)和(2)對於這種情況是有效的。

讓我們認為它對 i 有效(歸納假設)。

在第 i+1 次迭代中,考慮一個頂點 v 距離更新為 d[v]:= d[u] + w[u][v] 的時刻。 根據歸納假設,d[u] 是從 s 到 u 的某個路徑的長度。 那么 d[u] + w[u][v] 是從源到 v 的路徑的長度,它沿着從源到 u 到 v 的路徑。所以,(1) 對 (i+1) 有效)-th 迭代和歸納法對所有自然 i 都有效。

現在,考慮一條從 s 到 v 的最短路徑 P(可能不止一條),最多有 i+1 條邊。 讓 u 成為這條路徑上 v 之前的最后一個頂點。 那么,從 s 到 u 的部分路徑是從 s 到 u 的最短路徑,最多有 i 條邊。 確實,假設它不是。 那么就會有一條從s到u的嚴格較短的路徑,最多有i條邊,可以附加到邊uv上,得到一條最多有i條邊的路徑嚴格短於P,這是矛盾的。 通過歸納假設,經過 i 次迭代后的 d[u] 至多是從 s 到 u 的最短路徑的長度。 因此,d[u] + w[u][v] 最多是 P 的長度。在第 (i+1) 次迭代中,d[v] 與 d[u] + w[u][ v],如果 d[u] + w[u][v] 更小,則設置為等於它。 因此,在 i+1 次迭代之后,d[v] 最多是 P 的長度,這是從 s 到 v 的最短路徑,最多使用 i+1 條邊。 因此,(2) 對第 (i+1) 次迭代有效,歸納法對所有自然 i 有效。


最后,注意如果有向圖有 |V| 頂點且沒有負環,從源 s 到頂點 u 的最短路徑至多有 |V| - 1 條邊。 所以,根據前面的結果,Bellman-Ford 確實找到了從 s 開始的所有最短路徑。

請注意,Bellman-Ford 算法基於遞歸關系,它指出

d(i,v)是從源到每個節點v的最短距離,它們之間最多有i條邊。

隨着i增長到i+1 ,您允許多一條邊,並且只有在路徑長度有所改善時才更新路徑長度。

由於我們知道最短路徑最多可以有n-1邊,因此沒有必要進一步增加i ,即最短路徑必須是:

d(n-1,v)

暫無
暫無

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

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