エドモンド-カープアルゴリズム: 詳細な効率分析

Edmonds-Karp アルゴリズムは、フローネットワーク内で最大フローを計算するための Ford-Fulkerson メソッドの特定の実装です。 元の Ford-Fulkerson メソッドは、拡張パスの任意の検索 (病理学的例の指数関数的な時間につながることができます) を使用している間、 Edmonds-Karp は BFS ベースの検索を実施し、最短のアグメンディングパス (エッジの境界線) が、各々の配列の理論とネットワークの理論をうまく定義するかどうかを検証します。

アルゴリズムの説明と重要なプロパティ

方向のグラフ ]G = (V, E) をソースで ]]]] で、シンク t] と、容量関数 c: E → R+ と、エドモンド - カルプアルゴリズムは次のようになります。

  1. すべてのエッジの [f(e) = 0 を初期化します。
  2. 残留グラフ[]G[f[](現在のフローに等しい容量の後方エッジを含みます)を構成します。
  3. ]G[]]f[]]から]s[]でBFSを実行して、最も短い方向のパスをt[]から検索します。(エッジの数で測定)。
  4. パスが存在しない場合、終了; 現在のフローは最大です。
  5. それ以外の場合は、パスに沿ってボトルネック容量(最小残留容量)を決定します。
  6. パスに沿ってその量で拡張フローと残りの容量を更新します。
  7. ステップ2から繰り返します。

BFS の使用は、見つかった各拡張パスが残留グラフの最短パスであることを保証します。重要なプロパティが出現します。s[から[]t]までの距離が減少し、厳密にすべての[O(E)を直接増加させません。これは、複雑さにつながります。

複雑化解析

それぞれのBFSの実行時間は]O(V + E)に簡素化され、典型的なスパースのグラフのO(E)です。 コアチャレンジは、拡張回数を制限しています。 各拡張は少なくとも1つのエッジ(ボトルネック)を飽和させ、各エッジは、最も一般的には[FLT:][FLT]を[FLT]にすることができます。 [FLT:[F]F]は、各領域は[FLT]の[F]を[F]に送ります。 [F]:[F]:[F]:[F] [F]:[F]:[F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F

より正確に、標準解析では、拡張回数が最も[]O(VE)]であるので、全体的な時間はO(V E2)(または]]]O(V E *(V + E)))です。 ]が完成します。 [[FLT:]が、[FLT:]が、[FLT:]が、[FLT:]が、[FLT:]が、または[[FLT:]が、[FLT]が、[[F]が、[[FLT]が、[[[[F]が、]が、[[[[[[[[[[[FLT]が]が]が、]が、]が、]が、[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

他の最高の流れアルゴリズムとの比較

ダイナックのアルゴリズム

Dinicのアルゴリズムは、BFSを使用してレベルグラフを構築しますが、レベルグラフでDFSを介して単一フェーズで複数の拡張パスを割り当てます。これにより、BFSの実行回数が最もVに減少します(シンクのレベルが各フェーズを増加させるため)。全体的な複雑性は]O(V2 E)[FLT:]][FLT:[FLT:]]]]][FLT:[FLT:]]]]]のほとんどが、および[FLT:[FLT:[FLT:[F]]の]の変換は、DAC[F]の実行されます。[F]は、ほとんどのネットワークは、DACは、DACは、[F]は、[FLTは、DACは、[FLTは、DACは、DACは、DACは、[F]は、[F]は、ほとんどのネットワークは、[F]は、[F]は、[F]は、[F]は、[FLTは

プッシュ・レーベルアルゴリズム

一般的なアルゴリズムや最高ラベルのバリアントなど、プッシュレラベルメソッドは、]O(V2 √E)またはO(V3)のバインドを達成します。 それらは、有効なラベルを維持するために、適格なエッジに沿ってフローをローカルにプッシュし、検証を見直して作業します。 これらのアルゴリズムは、より複雑な実装がより複雑で、特に、より高速なグラフの分析のために、最も高いラベルが使用されます。

もう一つの重要なバリアントは、 ] 容量スケーリング] アルゴリズムで、Ford-Fulkerson メソッドにスケーリングパラメータを追加し、] O(E2 ログ U)]U を最大容量とする。 これは、プッシュラベルよりも多項的だが単純なものである。

エドモンド・カープ・スティラー・マターズの理由

ダイナックとプッシュレレーベルよりも遅くても、エドモンズ・カープは、ペダゴリーに価値があります。そのシンプルさと、ポリノミアルランタイムの直感的な証拠(最短パスモノトニックスに基づいて)は、優れた教育ツールです。多くのコンピュータサイエンスカリキュラムは、より高度な方法に移動する前にエドモンズ・カープを導入しています。さらに、中規模のネットワーク(千の頂点まで、および端まで)に小規模なネットワーク(特に、)では、特に、性能が低い場合、パフォーマンスが欠かせません。

実用的なインプリケーションとユースケース

実際のアプリケーションでは、アルゴリズムの選択は問題の制約に大きく依存します。例えば:

  • [バイパナイトマッチング]: エドモンド・カープは、容量がユニットの場合、ホプクラフト・カープアルゴリズムに減り、ネットワークはバイパナイトですか? 実際にはいいえ - ホプクロフト - カープはO(E √V)時間; しかし、ユニットバイパテントのグラフ上のエドモンド - カルプは、ETL4の領域が実行される[FLT]と[FLT]は、それぞれ[FLT]の領域の領域は、 [[FLT]の領域]と[F] [[F] [F] : [F] : [F] : [F] : [F] [F] [F] [FLT: [F] : [F] : [F] : [F] : [F] : [FLT: [F] : [F] : [F] : [FLT: [F] [F] : [FLT: [F] : [F] : [F] : [F] : [F] : [FLT:
  • [ 交通工学]]:通信と道路ネットワークでは、フローはしばしば大きく、スパースをグラフ化します。 ダイナックまたはプッシュレラベルは、より優れたスケーリングのために優先されます。
  • [Image Segmentation]: グラフはコンピュータの視覚のためのアルゴリズムをカットし、多くの場合、最大流/分カット計算に依存します。 Boykov-Kolmogorovアルゴリズム、特殊な拡張パスメソッド、これらのグリッドのようなグラフの一般的なアルゴリズムをアウトパーフォームしますが、 Edmonds-Karp はより小さい問題に使用できます。
  • []教育とプロトタイピング[:単純さと正しさが生の速度上を並行しているとき、エドモンズ・カープは安全な選択です。その動作は予測可能であり、BFSが実装しやすいため、デバッグは簡単です。

連続的パフォーマンス

ランダムなグラフのベンチマークは、エッジの容量が小さいときに、エドモンズ・カープは、多くの場合、練習中の近線形時間(])で実行されることを示しています。 O(1)]))))。 拡張回数は、最大フロー値で制限されるため、アルゴリズムは小さめになる可能性があります。 しかし、大容量ネットワークでは、アルゴリズムは劣化する可能性があります。 例えば、容量が大きい整数であるネットワークを考慮すると、そのような場合、ダイナミが多岐に及ぶ可能性があります。 そのような場合、このような大きな価値がより大きな要因である可能性があります。

導入検討

Edmonds-Karp を実装する際には、慎重に残留グラフ管理が不可欠です。 前方と後方の両方のエッジを表現することで、簡単に拡張とバックトラッキングが可能になります。 逆のエッジ(または逆のエッジインデックスを格納する)にポインタ付きのアダシデントリストを使用して、更新を簡素化します。 BFS は、前方者をアガメンディングパスを再構築する必要があります。 メモリ使用量は ]O(V + E)[FLT][FLT]]です。

最適化には、以下が含まれます。

  • BFSが到達できない場合、早期終了]t[
  • 整数の容量とフローを使用して、浮動小数点の問題を回避します。
  • グラフが多くの平行なエッジ(あまり一般的ではない)を持っている場合は、複数の拡張を調整します。

非常に大きなネットワークでは、ダイナミックな BFS を使用して、距離を増やすことを検討していますが、これは頻繁に、特にエドモンド・カルプの重要な利益なしで複雑性を追加します。

元のフォード・フルカーソン方法への関係

Jack EdmondsとRichard Karpは1972年にアルゴリズムを出版しました。BFSの使用が多項式の最大フローアルゴリズムを占めることを実証しました。その前に、Ford-Fulkersonメソッド(1956)はパス選択ルールを指定しなかったため、悪い選択肢が指数関数的な時間につながる可能性があることを明らかにしました。 EdmondsとKarpの作業は、ネットワークフローの強力な多項式アルゴリズムの開発における基礎的なステップでした。論文[FORT]は、Altrimicの効率性を保たします。

延長とバリエーション

エドモンド・カープの品種:

  • []容量スケーリングバージョン[: 最短経路に沿って常に拡張する代わりに、アルゴリズムはスケーリングパラメータΔ[で動作し、残りの容量≥Δでエッジのみを考慮する。 これは]]]]O(E2ログU)アルゴリズムを収量します。
  • [ユニット容量の最適化]:すべての容量が1の場合、BFSベースの拡張パスアルゴリズムはHopcroft-Karpアルゴリズムに特化しますが、後者は]O(E √V)を達成するために、慎重にBFS / DFSを交互に使用しています。
  • Integrality]: 容量が積分されるとき、アルゴリズムは、それによって結合器の問題に適した統合的な流れを維持します。

コンテンツ

Edmonds-Karp アルゴリズムは、最大フローの問題を解決するための信頼性が高く、十分に根本的な方法です。 ]O(V E2) 最悪のケース時間複雑さは、非常に大きなネットワークや密なネットワークに対して実用的になりますが、そのシンプルさと多項的なランタイムの明確な証拠は、アルゴリズムのテキストにその場所を隠しています。 高性能を必要とする現実的なシステムでは、Dinermic は、一般的には、教育的方法として、重要な問題やアルゴリズムを提示します。

高度なフローアルゴリズムの読み方は、]のWikipedia article]と古典的なテキスト]で見つけることができます。 Algorithms(CLRS)への導入。 フローアルゴリズムのパフォーマンスのより深い分析については、]]を参照してください。NetworkXフロー実装ノート