最大流問題
過去に何回か手を付けたけどなぜか全く頭に入っていないので,Wikipediaの記事を参考にまとめる.
フローネットワーク - Wikipedia
有限な有向グラフ の各枝 に非負実数の容量 が設定されているとする。 の場合、 と見なす。ここで、2つの頂点、始点 と終点 を区別する。フローネットワークは実数関数 で表され、全ノード と について、次が成り立つ。
・・・
辺に容量が与えられているので,容量オーバーしない程度にいくらくらいの量の水を流せるかという問題.
パラメータは3つの制約条件(容量制限,歪対称性,フロー保存則)を満たし,
そのうえでフローを最大化させるのが目的.
色々アルゴリズムがあるっぽいけどフォード・ファルカーソンを見てみる.
フォード・ファルカーソンのアルゴリズム - Wikipedia
色々書いてるけど次のようなことを言ってる.
- 最初はとする.
- まだ水を流すことのできる辺だけをたどってからに行けるか見る.(からへの経路で,となるものがあるか)
- 実装は適当な探索(BFSとか)で.
- もし可能ならそこに流せるだけの水()を流す.
- 無理なら終わる.
これだけ.
ここで,水は有向グラフの辺の逆向きにも流せることに注意したい.
たとえばある2つの頂点がこの順でつながっていて,なら辺には残り2まで水を流せるが,一方で辺には3までの水を流し込める.
(既に水を流しているところに逆向きに流す感じ)