Bellman-Fordアルゴリズム-エッジを順不同で更新できるのはなぜですか?


14

ベルマン-フォード法は、ソースからの最短経路決定他のすべての頂点にします。最初にと他のすべての頂点間距離は設定されます。次に、から各頂点まで最短パスが計算されます。これは、回の反復で続き ます。私の質問は:| V | 1sss|V|1

  • なぜ回の反復が必要なのですか?|V|1
  • 別の順序でエッジをチェックした場合、問題になりますか?
    たとえば、最初にエッジ1、2、3をチェックしてから、2回目の反復で2、3、1をチェックするとします。

MITのEric教授は順序は重要ではないと言ったが、これは私を混乱させる:値がエッジに依存しているがが後に更新される場合、アルゴリズムはエッジ基づいてノードを誤って更新しないか?x 1 x 1 x 2バツ2バツ1バツ1バツ2


どの実装を検討しますか?動的プログラミングでは、順序に問題はありません。他の人にとっては、自明ではないかもしれません。
ラファエル

回答:


15

sからt、への最短経路を考えます。負のウェイトサイクルがない場合、最短パスで頂点を繰り返すことは常に悪い考えです(または、少なくとも頂点を繰り返さない最短パスがあるため)このパスは最大でエッジで構成されます。。| V | 1sv1v2vkt|V|1

ラウンド1では、エッジが緩和されることがわかっているため、このラウンドの後、の距離の推定値は正しくなります。この時点でが何であるかわからないことに注意してください。ただし、すべてのエッジを緩和しているため、このエッジも緩和している必要があります。ラウンド2では、ある時点でリラックスします。またはが何であるかはまだませんが、距離の推定値が正しいことはわかっています。v 1 v 1v 1v 2v 1 v 2sv1v1v1v1v2v1v2

これを繰り返し、いくつかのラウンド後、私たちはリラックスしているVのKT された後のために距離推定値、tは正しいです。アルゴリズム全体が終了するまでkが何であるかはわかりませんが、ある時点で発生することがわかっています(負のウェイトサイクルがないと仮定)。k+1vkttk

だから、重要な観察は、ラウンド後のことであるI番目のノードの最短経路の正しい値への距離推定値が設定されていなければなりません。パスはせいぜい| V | 1辺の長さ、| V | この最短経路を見つけるには1ラウンドで十分です。もし| V | ラウンドはまだ何かを変更し、それから奇妙なことが起こっています。すべてのパスはすでに最終値に「設定」されているはずなので、負のウェイトサイクルが存在する必要があります。ii|V|1|V|1|V|


ここには少し疑問があります。| v | -1は、sからtまでの最短経路が計算されるラウンドの最悪の場合の数であると考えています。頂点s、v1、v2..vn、tがあると仮定します。 (s、v1)、(v1、v2)..(vn、t)という順序でエッジが選択されると、1回の反復自体でsからtへの最短パスが得られます。実際の用語では、選択されているエッジの順序がわからないため、| v | -1ラウンドです。
whokares

1
@whokares:はい、あなたは幸運になって最初のラウンドで最短の道を見つけるかもしれません。最後のラウンドまで、見つけた値が実際に最短パスであることはわかりませんが、そうなる可能性があります。ダイクストラのアルゴリズムは、本質的にこれを「引き起こします」:すべてのエッジに非負の重みがある場合、ダイクストラのアルゴリズムで使用される優先度キューは、エッジを緩和する順序を「予測」し、緩和の最初のラウンドですべての最短パスを見つけます。
アレックス10ブリンク

更新していただきありがとうございます。資料の1つで、<br>スライド6:リラクゼーション順序の選択が不適切な場合、指数関数的に多くのリラクゼーションが発生する可能性があります。<br>スライド8:エッジリラクゼーションの「スマート」順序<br>
whokares

各反復のエッジの順序に関係なく、最短パスは| v | -1反復で計算されますか?なぜ彼が指数関数的と言っているのか、つまり、通常のすべての反復に対して同じ順序を選択した場合、緩和コードが呼び出されますが、頂点のラベルの更新は、順序が原因でプロセッサの節約になるため、回数が少なくなる可能性があります時間?
whokares

1
@whokares:彼らが提示する最初のアルゴリズム(指数関数的な実行時間を持つ可能性がある)は、ラウンドのすべてのエッジを緩和せず、代わりに緩和操作が何かを変更するエッジを見つけ、このエッジを緩和します。これを続けて、負のウェイトサイクルがない場合、最終的にはエッジがそれ以上役立たず、停止します。ただし、次にリラックスするエッジにラウンドとセットの順序がないため、指数関数的な数のリラックスを行うことになります。彼らが提示する改善されたアルゴリズムは、ラウンドを持っているベルマンフォードです。
アレックス10ブリンク

3

サイクルなしのパスの最大長は|V|です。ソースから開始するため、長さ1のパスが既にある|V| - 1ため、最長パスを取得するにはさらにノードが必要です。

すべての順序が不変を維持するため、順序は重要ではありません。n反復後、各ノードの値は、最大コストエッジsから最大でnエッジを含むノードまでの最小コストパスのコスト以下になります。

反復の開始時にnノードまでコストが正しい場合、反復の終了時にノードまでコストが正しくなりますn+1。再順序付けにより、一部のノードは通常更新される前に低コストになる可能性がありますが、いずれにしてもノードは最終的に更新されます。


私だけなのか、これらの事実を簡単に視覚化できないのかわかりません。私にとっては、V-1の繰り返し内で更新されていないノードがあるかもしれないとまだ思っています。
user1675999

いいえ、| V |がある場合、| E | = | V | -1のエッジがあります。サイクルのない単純なパスで接続されたノード。そして、| V | -1の反復がありますが、応答が間違っているので削除してください。
サム

@samあなたは誰であり、あなたが言うことは答えと何の関係がありますか?
fgb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.