ディニッツ法

提供: testwiki
ナビゲーションに移動 検索に移動

ディニッツ法(ディニッツほう、テンプレート:Lang-en-short)とは、1970年にイスラエル(元はソ連)のコンピュータ科学者のテンプレート:仮リンクにより提案されたネットワークフローにおける最大流問題に対するテンプレート:仮リンクアルゴリズムである[1]。ディニッツ法は計算量 O(|V|2|E|) で動作し、同じく最短増加路を求め計算量 O(|V||E|2) で動作するエドモンズ・カープ法に類似している。ディニッツ法はレベルグラフとブロッキングフローテンプレート:Efnという概念を導入することで上記の計算量を達成している。

歴史

ディニッツは1969年1月テンプレート:仮リンクの修士課程の生徒としてディニッツ法を編み出した。数十年後、当時のことを以下のように語った[2]: テンプレート:Blockquote

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

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

定義

ネットワーク G=((V,E),c,f,s,t)において辺容量を c(u,v)、フローを f(u,v) とする。このとき、

残余容量 cf:V×VR+ は以下のように定義される:
  1. もし、(u,v)E ならば、
    cf(u,v)=c(u,v)f(u,v)
  2. もし、(v,u)E ならば、
    cf(u,v)=f(v,u)
  3. そうでなければ、cf(u,v)=0
残余ネットワークは重みなしのネットワーク Gf=((V,Ef),cf|Ef,s,t) と定義される。ただし、
Ef={(u,v)V×V:cf(u,v)>0}.
増加路は残余ネットワーク Gf における路 st である。
dist(v)Gf において始点 s から頂点 v への最短路の値を表す。このとき Gf におけるレベルグラフGL=((V,EL),cf|EL,s,t) と定義される。ただし、
EL={(u,v)Ef:dist(v)=dist(u)+1}

である。

ブロッキングフローs から t へのフロー f を表し、G=((V,EL),s,t) で定義される。ただし、EL={(u,v):f(u,v)<cf|EL(u,v)} であり、s から t への路は含まれないテンプレート:Efnテンプレート:Sfn

アルゴリズム

ディニッツ法

入力: ネットワーク G=((V,E),c,s,t)
出力: s から t へのフロー f の最大値
  1. 各辺 eE のフローを f(e)=0 とおく。
  2. G における Gf から GL を構築する。もし、dist(t)= が存在するならば、アルゴリズムは停止し、f を出力する。
  3. GL におけるブロッキングフロー f を求める。
  4. f から増加路 f を求め、ステップ2へ戻る。

分析

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

  • レベルグラフ GL幅優先探索によって計算量 O(E) で求まる。
  • レベルグラフ GL におけるブロッキングフローは計算量 O(VE) で求まるテンプレート:Efn

このことから一回の反復にかかる計算量は O(E+VE)=O(VE) となる。結果として、全体の計算量は O(V2E) となる[2]

テンプレート:仮リンクと呼ばれるデータ構造を用いると、各反復におけるブロッキングフローは計算量 O(ElogV) まで減少させることができるため、ディニッツ法の計算量は O(VElogV) まで改良することができる。

特別なケース

単位容量を持つネットワークにおいては強多項式時間が保たれる。ブロッキングフローは計算量 O(E) で求めることができ、反復も O(E) もしくは O(V2/3) を超えない範囲で終了することが保証されているテンプレート:Efn。すなわちディニッツ法は計算量 O(min{V2/3,E1/2}E) で動作する[3]

最大二部マッチング問題に対するネットワークにおいては、反復の上界が O(V) となることが知られており、計算量は O(VE) で動作する。このことはテンプレート:仮リンクとして知られている。一般的に言えば、ネットワークにおいてシンクおよびソースを除く各頂点を結ぶ辺がすべて容量1の入る辺もしくは容量1の出る辺であり、他の辺の容量がすべて整数値をとる単位ネットワーク上で成り立つテンプレート:Sfn

具体例

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

G Gf GL
1.

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

  1. フロー4を持つ路: {s,1,3,t}
  2. フロー6を持つ路: {s,1,4,t}
  3. フロー4を持つ路: {s,2,4,t}

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

2.

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

  1. フロー5を持つ路: {s,2,4,3,t}

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

3.

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

脚注

テンプレート:脚注ヘルプ

注釈

テンプレート:Notelist

出典

テンプレート:Reflist

参考文献

関連項目

テンプレート:最適化アルゴリズム