ディニッツ法
From Wikipedia, the free encyclopedia
歴史
ディニッツは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]。
具体例
ディニッツ法を以下で説明する。レベルグラフ において頂点の赤色の数値は を表す。また青色の辺からブロッキングフローが求まる。