Bellman-Fordアルゴリズムの正しさは、まだより良いことをすることができますか?

StackOverflow https://stackoverflow.com//questions/20024294

質問

Bellman-Fordアルゴリズムにはo(| e | * | V |)の走行時間があることを学び、ここでEはエッジ数とv個の頂点数です。グラフに負の重み付けサイクルがないと仮定します。

私の最初の質問は、(| V | -1)の繰り返し(すべての反復がEのすべてのエッジをチェックします)、特定の開始ノードを指定して、すべての可能なノードへの最短パスを更新します。繰り返し(| V | -1)回、まだすべてのノードへの最短パスで終わらないことが可能ですか?

アルゴリズムの正確さを想定して、実際にはそれよりも良くすることができますか?すべてのエッジが特定のグラフで負の重み付けされているわけではないことに起こります。Bellman-Fordアルゴリズムは、それがすべてのエッジを通過するすべての繰り返しのように、高価に思われます。

役に立ちましたか?

解決

ソースから任意の頂点への最長のパスには、グラフ内の他のすべての頂点が含まれます。言い換えれば - あなたは必ずしも重みを増加させるので、あなたは同じ頂点を複数回通過する経路を持たないでしょう(これは負のサイクルがないという事実のためだけに当てはまります)。
各反復で、このパスの次の頂点上の最短パス重みを更新します.v | -1繰り返しあなたの更新はそのパスの終わりに達する必要があるでしょう。その後、アップデートがその長さまですべての最短パスをカバーしているため、厳密な値がある頂点はありません。

この複雑さは(少なくともBFの場合)、接続されている頂点の長いラインを考えています。ソースとして最悪のものを選ぶ - あなたの更新プロセスは、一度に頂点が一度そこに向かってそこからその方法を動作させる必要があります。今、あなたはそれぞれのエッジをチェックする必要がないと主張するかもしれませんし、非常に大きな体重(n> | v | v | max-wimels) - 彼らはあなたを助けることができません、しかしあなたのアルゴリズムは確かにそうであることを知ることができないので、これらの重みを使って頂点を更新するプロセスを経なければならない(彼らは初期無限大よりも優れている)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top