Table of Contents
全ペアの最短経路問題の理解
あらゆるペアの頂点間の最短距離を重みのあるグラフで探し出す、APSP(全ペアの最短経路)の問題は、ネットワーク設計、トラフィックフローの最適化、ソーシャルネットワーク分析、および物流のための直接的な影響を持つグラフ理論の基本的な課題です。 単一ソースの最短経路の問題とは異なり、APSPを解決するには、各頂点からすべての他のすべての頂点に計算距離を要求し、ノードの数を数値的にスケールアップします。
一般的なアプローチは、この問題に対処しますが、トレードオフに直面します。 Floyd-Warshall、動的プログラミングアルゴリズムは、密なグラフで動作しますが、]O(V]3]])で実行され、負の体重サイクルを処理することができません。 各頂点から実行されると、DikstraのアルゴリズムはO(V[FLT:V]]])])])[]]]を負のギャップに結び付けます。 [Vennanのギャップは、V[V[V]は、V[V[V]は、V[V[V[V]は、V]は、V[V]は、V[V[V]は、V]は、V[V[V]は、V[V]は、V[V[V[V[V[V]は、V]は、V[V[V[V]は、V]は、V[V[V]は、V]は、V
一般的なアルゴリズムの比較
ジョンソン社のアルゴリズムを高く評価するために、最も頻繁に使用されるAPSPソルバーと対比するのに役立ちます。
- []Floyd-Warshall - 実装が簡単、2D距離行列を使用して、トリプルループを介して更新します。 負のエッジではなく、マイナスのサイクルで動作します。 立方時間のために何千もの頂点のグラフの実用性。
- [] リードされたDijkstra - 各頂点からDijkstraを実行します。 スペールグラフ([])で高速に、O(V EログV))は、Fibonacciヒープを使用して、非負の重量に制限されます。
- []Bellman-Ford (repeated)[] - 負のエッジを扱いますが、]で実行します[]2[]]]E]、両方の代替よりも遅くなります。
- []ヨハネのアルゴリズム[ - すべてのエッジが非負になるように、グラフをリウェイトし、繰り返しDijkstraを適用します。 これは、O(V E + V[]]2[]]ログV)[をバイナリヒープで、それで、マイナスの重みを持つ負のグラフの選択肢を好みにする。
ジョンソンのアルゴリズムがいかに働くか
ジョンソンのアルゴリズムは、負のエッジを含むグラフを、唯一の負のエッジウェイトで一元に変え、最短パスの構造を保存します。この変換は、Bellman-Fordの単一の実行から派生する[のポテンシャル関数に依存しています。リウェイトすると、Dijkstraのアルゴリズムは各ノードから安全に使用できます。アルゴリズムは4つのステップで構成されています。
ステップ1:スーパーソースノードを追加する
既存の頂点に、0 の端を結び、グラフに新しい頂点s[]]が付加されます。この追加ノードは、任意のパスが]sを使うので、最短距離を変更しません。
ステップ2:Bellman-Fordで潜在的な機能の計算
極度のソース[]sからBellman-Fordアルゴリズムを実行します。]sはすべての頂点にゼロウェイトエッジを持ち、アルゴリズムは最短距離]h(v)]からsをすべての頂点に、すべての頂点に、アルゴリズムはを負の間隔を計算します]と、Neの実行します。
ステップ3:グラフをリウェイトする
原重h(v)[、各端](u、v)(元の重量])w(u、v)[)は、次のリウェイトされます。
[w'(u, v) = w(u, v) + h(u) - h(v)
この変換は、すべてのリウェイトエッジ重量が非負であることを保証します。 証拠は、三角形の不平等に依存します。 h(v) ≤ h(u) + w(u, v)(Bellman-Ford's出力から)、それに従って ]w'(u, v)≥ 0]。 さらに、パスの順序は、任意のグラフが残っているすべてのグラフが残っている。
ステップ4:各VertexからDijkstraのアルゴリズムを実行
負でないエッジのみを含むリウェイトされたグラフでは、Dijkstraのアルゴリズムは、すべての頂点から1回実行されます。各実行は、他のすべての頂点に最短距離を計算します。結果の間隔は、式を使用して元のエッジ重量に戻ります。
[ dist オリジナル[]] (u, v) = dist をリウェイト (u, v) - h(u) + h(v)
最終段階は、報告された距離が元のグラフの精度を確保します。
複雑性とパフォーマンスの分析
ジョンソンのアルゴリズムは、 ]O(V E + V]2]]ログV) のバイナリヒープ優先キューで実装されたとき。 O(V E)] V[FLT:[FLT:]]]]]]V[FLT:[FLT:[FLT:]V[FLT:]]V[FLT:[FLT]]V[FLT:[FLT]]]V[F]]V[F]]V[F]V[F]]V[F]V[F]F [[FLT:[F]V[F]F]F]F]F [[F]]F [F]F [F [FLT:[F]]]]]]V[F [F [[F [F [F [F [F]]]]]V[F [F [F [F [F]]]]]]]]]]]]]F
フィボナッチヒープを使用すると、Dijkstraの部分を]に減らすことができます。O(V E + V]]2]ログV)が、慣行中のバイナリヒープはよりシンプルで、十分に高速です。メモリフットプリントは]]O(V]2]])[FLT:]が、変換され、バイナリヒープが簡単であり、多くの場合、十分に高速です。この結果は、[FLT]は、[FLT]7]が、[FLT]は、[FLT]は、[FLT:[F]は、[FLTF]は、[FLTF]は、[F]は、[FLTF]は、[F]は、[FLTF]は、[F]は、[F]は、[FLTF]は、[F]は、[FLTF]は、[F]は、[F]は、[FLTFLTFLT
実用的応用
ジョンソン社のアルゴリズムは、グラフエッジが負のコストと全ペアの最短距離を運ぶことができるドメインで採用されています。 実際の例には、
- []:[]]]]インターネットサービスプロバイダと通信ネットワークは、リンクが変動またはマイナスになる場合でも、任意の2つのルータ間の最も安いパスを適応的に計算しなければならない分散ルーティングプロトコルを使用します(例えば、混雑やポリシーの割引による)。
- []都市交通計画:[]マッピングおよび物流会社(例えば、Googleマップ、OpenStreetMapルーティングエンジン)は、フリートの最適化のための多くの起源 - 目的地のペア間の最短パスを計算します。負の重量は、サブシディーまたは時間ベースの割引をモデル化することができます。
- [サプライチェーンコストの最小化:[マルチステージプロダクションネットワークでは、ノードから別のノードへのコストがマイナス(例えば、リベート)される可能性があります。 ジョンソンのアルゴリズムは、サプライチェーン全体で最も収益性の高いルートを見つけます。
- ソーシャルネットワーク分析:]] 測定の接近性または交差性集中力は、すべてのペア距離を必要とします。 負のエッジは、「友人の友人」の割引リンクまたは有利な関係を表すことができます。
- []経済入力出力モデル:[レオネティフモデルとフロー分析は、多くの場合、負の係数を含む。 ジョンソンのアルゴリズムは、相互接続された経済を介して変化を伝播するネット効果を計算します。
数学の基礎をさらに読み込むには、を参照してください。Wikipediaの詳細なエントリ]とDonald B. Johnson(1977)による元の紙。 Pythonの実用的な実装は[]]]]で見つけることができます。NetworkXのGitHubリポジトリ。これはジョンソンのアルゴリズムを標準機能として含んでいます。リ級技術を理解するために、 - [FLT:XNUMX - [FLT - >] - [FLT - [FLT - >] - 明確なチュートリアルを提供します。
コンテンツ
ジョンソンのアルゴリズムは、ネガティブエッジの重みが提示されると、すべてのペアの最短経路問題に対するエレガントで実用的なソリューションとして際立っています。Bellman-Ford(負のサイクルやコンピューティングの潜在能力を検出するための)の堅牢性を組み合わせることで、Digikstra(非負のグラフの場合)の速度で、スパールネットワークの優れた性能を実現します。リウェイト技術自体は、潜在的な機能の美しい応用です。つまり、最小限の戦略的な領域にまで続く短い経路を超えて、ゲーム理論やアルゴリズムを拡張する概念です。
グラフがスパースで、ネガティブなエッジを含むことができる、現実のAPSP問題に直面した場合、ジョンソンのアルゴリズムは最初の考慮すべきです。その理論的保証とライブラリにおける広範な実装(例えば、[]]NetworkX[]]]、[[]))は、それが採用する実用的になります。