ディニッツ法(ディニッツほう、: Dinic's algorithm, Dinitz's algorithm)とは、1970年にイスラエル(元はソ連)のコンピュータ科学者のイェフィム・ディニッツ英語版により提案されたネットワークフローにおける最大流問題に対する強多項式時間英語版アルゴリズムである[1]。ディニッツ法は計算量 で動作し、同じく最短増加路を求め計算量 で動作するエドモンズ・カープ法に類似している。ディニッツ法はレベルグラフとブロッキングフロー[注釈 1]という概念を導入することで上記の計算量を達成している。

歴史

編集

ディニッツは1969年1月ゲオルギー・アデルソン・ヴェルスキー英語版の修士課程の生徒としてディニッツ法を編み出した。数十年後、当時のことを以下のように語った[2]:

アデルソン・ヴェルスキーのアルゴリズムの講義では毎回次週の講義内容に関する問題の課題を出していた。ディニッツ法はこの課題の回答として出来上がったものである。当時(ディニッツ自身は)既に解法として知られていたフォード・ファルカーソン法について知らなかった…。

無知なことは時に役立つことがある。もし(フォード・ファルカーソン法での)飽和した辺に対する手続きを既に知っていたとしたら、ディニッツ法は生み出されていないだろう。

1970年にディニッツは Doklady Akademii Nauk SSSR に論文を寄稿した。1974年には(ディニッツの博士課程指導学生の)サイモン・イーブン英語版およびテクニオン・イスラエル工科大学のアーロン・イタイはディニッツ法やアレキサンダー・カルザノフ英語版が考案したブロッキングフローに関する概念に強く興味を抱いた。しかしながら、これらの論文は掲載誌の Doklady Akademii Nauk SSSR に規定されているページ数の制限(4頁)により、論文の内容を理解するのに難儀した。論文の解読を続けたことで、結果として層別ネットワークに対する手続きを除いた論文の内容を三日間で理解することができた。両者は著者の名前を間違えながらも、数年かけてディニッツ法に関する講義を行って世間に知らしめていった。イーブンとイタイは層別ネットワークの代わりに幅優先探索深さ優先探索を組み合わせたディニッツ法を普及したため、現在ではこの方法によるディニッツ法が一般的に知られている[2]

フォード・ファルカーソン法が提案されてから約10年間は無理数の辺容量を持つような一般のネットワークに対する強多項式時間アルゴリズムの存在性は示されていなかった。そのため最大流問題が強多項式時間で解けるかは不明であった。ディニッツ法と(1972年発表の)エドモンズ・カープ法はフォードファルカーソン法において各反復で求まる増加路が最短路であるならば、増加路の長さが単調増加するため、有限の反復回数で必ず終了することをそれぞれ独立して証明した。

定義

編集

ネットワーク  において辺容量を  、フローを   とする。このとき、

残余容量   は以下のように定義される:
  1. もし、  ならば、
     
  2. もし、  ならば、
     
  3. そうでなければ、 
残余ネットワークは重みなしのネットワーク   と定義される。ただし、
 .
増加路は残余ネットワーク   における路    である。
   において始点   から頂点   への最短路の値を表す。このとき   におけるレベルグラフ  と定義される。ただし、
 

である。

ブロッキングフロー  から   へのフロー   を表し、  で定義される。ただし、  であり、  から   への路は含まれない[注釈 2][3]

アルゴリズム

編集

ディニッツ法

入力: ネットワーク  
出力:   から   へのフロー   の最大値
  1. 各辺   のフローを   とおく。
  2.   における   から   を構築する。もし、  が存在するならば、アルゴリズムは停止し、  を出力する。
  3.   におけるブロッキングフロー   を求める。
  4.   から増加路   を求め、ステップ2へ戻る。

分析

編集

反復ごとにブロッキングフローの層の数は少なくとも1ずつ増えることから、ブロッキングフローは最大でも   の層の数となる。また以下のことが言える:

  • レベルグラフ  幅優先探索によって計算量   で求まる。
  • レベルグラフ   におけるブロッキングフローは計算量   で求まる[注釈 3]

このことから一回の反復にかかる計算量は   となる。結果として、全体の計算量は   となる[2]

動的木英語版と呼ばれるデータ構造を用いると、各反復におけるブロッキングフローは計算量   まで減少させることができるため、ディニッツ法の計算量は   まで改良することができる。

特別なケース

編集

単位容量を持つネットワークにおいては強多項式時間が保たれる。ブロッキングフローは計算量   で求めることができ、反復も   もしくは   を超えない範囲で終了することが保証されている[注釈 4]。すなわちディニッツ法は計算量   で動作する[5]

最大二部マッチング問題に対するネットワークにおいては、反復の上界が   となることが知られており、計算量は   で動作する。このことはホップクロフト・カープ法英語版として知られている。一般的に言えば、ネットワークにおいてシンクおよびソースを除く各頂点を結ぶ辺がすべて容量1の入る辺もしくは容量1の出る辺であり、他の辺の容量がすべて整数値をとる単位ネットワーク上で成り立つ[3]

具体例

編集

ディニッツ法を以下で説明する。レベルグラフ   において頂点の赤色の数値は   を表す。また青色の辺からブロッキングフローが求まる。

     
1.      

ブロッキングフローは以下の路から構成される:

  1. フロー4を持つ路:  
  2. フロー6を持つ路:  
  3. フロー4を持つ路:  

それゆえ、ブロッキングフローは 14 となり、フロー    となる。増加路は3つの辺から構成されることに注意する。

2.      

ブロッキングフローは以下の路から構成される:

  1. フロー5を持つ路:  

それゆえ、ブロッキングフローは 5 となり、フロー    となる。増加路は4つの辺から構成されることに注意する。

3.      

  において   に到達することはできないことから、アルゴリズムは終了してフローの最大値19を返す。各反復ごとに増加路となる辺の数は一つ前の反復より少なくとも一つ増加することに注意する。

脚注

編集

注釈

編集
  1. ^ : level graph, blocking flow
  2. ^ このことは   を満たす飽和した辺が取り除かれた部分グラフにおいては   から   への路は存在しないことを意味する。言い換えると、ブロッキングフローには   から   への路の中に少なくとも一つ飽和した辺が含まれている。
  3. ^ ブロッキングフローは Advance および Retreat 操作により計算量   で求めることができる[4]
  4. ^ 計算量   は、2頂点において同じ向きの多重辺が含まれていないときに成り立ち、計算量   についてはこのような仮定無しに保証される。

出典

編集
  1. ^ E. A. Dinic (1970). “Algorithm for solution of a problem of maximum flow in a network with power estimation”. Doklady Akademii Nauk SSSR 11: 1277–1280. http://www.cs.bgu.ac.il/~dinitz/D70.pdf. 
  2. ^ a b c Dinitz, Yefim (2006). “Dinitz' Algorithm: The Original Version and Even's Version”. In Oded Goldreich; Arnold L. Rosenberg; Alan L. Selman. Theoretical Computer Science: Essays in Memory of Shimon Even. Lecture Notes in Computer Science. 3895. Springer. pp. 218–240. doi:10.1007/11685654_10. ISBN 978-3-540-32880-3. https://link.springer.com/chapter/10.1007/11685654_10 
  3. ^ a b Tarjan 1983, p. 102.
  4. ^ Salman Abolfathe, Jaime Quinonez (2006年). “Blocking flow”. 4 Advanced Algorithm. 2024年5月22日時点のオリジナルよりアーカイブ。2025年3月3日閲覧。
  5. ^ Even, Shimon; Tarjan, R. Endre (1975). “Network Flow and Testing Graph Connectivity”. SIAM Journal on Computing 4 (4): 507–518. doi:10.1137/0204043. ISSN 0097-5397. 

参考文献

編集

関連項目

編集