ディニッツ法
ディニッツ法(ディニッツほう、英: 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年発表の)エドモンズ・カープ法はフォードファルカーソン法において各反復で求まる増加路が最短路であるならば、増加路の長さが単調増加するため、有限の反復回数で必ず終了することをそれぞれ独立して証明した。
定義
編集ネットワーク において辺容量を 、フローを とする。このとき、
- 残余容量 は以下のように定義される:
- もし、 ならば、
- もし、 ならば、
- そうでなければ、
- もし、 ならば、
- 残余ネットワークは重みなしのネットワーク と定義される。ただし、
- .
- 増加路は残余ネットワーク における路 – である。
- は において始点 から頂点 への最短路の値を表す。このとき におけるレベルグラフは と定義される。ただし、
である。
アルゴリズム
編集ディニッツ法
- 入力: ネットワーク
- 出力: から へのフロー の最大値
- 各辺 のフローを とおく。
- における から を構築する。もし、 が存在するならば、アルゴリズムは停止し、 を出力する。
- におけるブロッキングフロー を求める。
- から増加路 を求め、ステップ2へ戻る。
分析
編集反復ごとにブロッキングフローの層の数は少なくとも1ずつ増えることから、ブロッキングフローは最大でも の層の数となる。また以下のことが言える:
このことから一回の反復にかかる計算量は となる。結果として、全体の計算量は となる[2]。
動的木と呼ばれるデータ構造を用いると、各反復におけるブロッキングフローは計算量 まで減少させることができるため、ディニッツ法の計算量は まで改良することができる。
特別なケース
編集単位容量を持つネットワークにおいては強多項式時間が保たれる。ブロッキングフローは計算量 で求めることができ、反復も もしくは を超えない範囲で終了することが保証されている[注釈 4]。すなわちディニッツ法は計算量 で動作する[5]。
最大二部マッチング問題に対するネットワークにおいては、反復の上界が となることが知られており、計算量は で動作する。このことはホップクロフト・カープ法として知られている。一般的に言えば、ネットワークにおいてシンクおよびソースを除く各頂点を結ぶ辺がすべて容量1の入る辺もしくは容量1の出る辺であり、他の辺の容量がすべて整数値をとる単位ネットワーク上で成り立つ[3]。
具体例
編集ディニッツ法を以下で説明する。レベルグラフ において頂点の赤色の数値は を表す。また青色の辺からブロッキングフローが求まる。
脚注
編集注釈
編集出典
編集- ^ 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 .
- ^ 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
- ^ a b Tarjan 1983, p. 102.
- ^ Salman Abolfathe, Jaime Quinonez (2006年). “Blocking flow”. 4 Advanced Algorithm. 2024年5月22日時点のオリジナルよりアーカイブ。2025年3月3日閲覧。
- ^ 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.
参考文献
編集- 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
- Kadar, Ilan; Albagli, Sivan (18 April 2019). Dinitz's algorithm for finding a maximum flow in a network. Ben-Gurion University. 2023年12月22日時点のオリジナルよりアーカイブ。
- Korte, B. H.; Vygen, Jens (2008). “8.4 Blocking Flows and Fujishige's Algorithm”. Combinatorial Optimization: Theory and Algorithms (Algorithms and Combinatorics, 21). Springer Berlin Heidelberg. pp. 174–176. ISBN 978-3-540-71844-4
- Tarjan, R. E. (1983). Data structures and network algorithms