解説

最大フロー最小カット定理

残余ネットワークの到達可能性を使って最大フロー最小カット定理を証明し、小さな例で最適性を確かめます。

目次

インタラクティブ

増加道、残余辺、最小カット

フローネットワーク(流量 / 容量)

0 / 10 / 10 / 10 / 10 / 1ssourceabtsink
増加道最小カット流量

「増加」を押して最初の増加道を求めます。

最大フロー = 最小カット

増加のたびに残余グラフの経路に沿って1単位を流します。2本目の経路は残余辺 b → a を使い、先に流した a → b の流量を打ち消します。経路がなくなると、s から到達できる集合が最小カットを定めます。

フローとカットが同じ限界を示す理由

フローは、容量に制限のある有向辺を通して始点から終点へ送れる量を表します。カットは両者を隔てるボトルネックを表します。最大フロー最小カット定理は、この二つの見方が同じ限界値を与えることを示します。

相異なる始点 ss と終点 tt を持つ有限有向ネットワーク G=(V,E)G=(V,E) を考えます。各辺 ee の容量 cec_e は有限かつ非負です。実行可能なフローは、各辺に fef_e を割り当てて

0≤fe≤ce0\leq f_e\leq c_e

を満たし、s,ts,t 以外の各頂点で流入量と流出量を等しくするものです。フロー値 ∣f∣|f| は ss から出る正味のフローであり、tt に入る正味のフローにも等しくなります。

ss–tt カットは、V=S∪˙TV=S\mathbin{\dot\cup}T、s∈Ss\in S、t∈Tt\in T を満たす分割です。容量には、元の辺のうち SS から TT へ向かう辺だけを数えます。

c(S,T)=∑e=(u,v)∈E: u∈S, v∈Tce.c(S,T)=\sum_{e=(u,v)\in E:\,u\in S,\ v\in T}c_e.

定理は、実行可能なフローの最大値が、すべての ss–tt カット容量の最小値に等しいと述べます。

どのカットもフローの上限

任意の実行可能フローとカットについて、SS 内の頂点の正味流出量を合計すると、内部辺のフローが相殺されて

∣f∣=∑e=(u,v): u∈S, v∈Tfe−∑e=(u,v): u∈T, v∈Sfe\begin{aligned} |f| &= \sum_{e=(u,v):\,u\in S,\,v\in T}f_e\\ &\quad-\sum_{e=(u,v):\,u\in T,\,v\in S}f_e \end{aligned}

となります。第2の和は非負で、第1の和の各項は対応する辺の容量以下です。したがって ∣f∣≤c(S,T)|f|\leq c(S,T) であり、これはすべてのフローとカットに成り立ちます。

残余到達可能性から等号を導く

最大フローは存在します。ゼロフローは実行可能であり、実行可能なフロー全体は有限次元空間の閉かつ有界な集合だからです。元の辺 u→vu\to v ごとに、残余グラフには容量 ce−fec_e-f_e の順方向辺と容量 fef_e の逆方向辺があります。逆方向辺は、その元の辺にすでに流したフローを取り消せることを表します。

正の残余容量を持つ辺だけをたどって ss から到達できる頂点を SS、残りを T=V∖ST=V\setminus S とします。tt が SS に含まれるなら、残余路の正のボトルネック分だけフローを増やせるため、最大性に反します。よって SS から TT へ向かう正容量の残余辺はありません。その結果、SS から TT へ向かう元の辺はすべて飽和し、TT から SS へ向かう元の辺にはフローがありません(あれば逆方向残余辺がカットを越えます)。先ほどのカットの式に代入すると ∣f∣=c(S,T)|f|=c(S,T) です。どのフロー値もどのカット容量も越えないため、このフローは最大、このカットは最小です。

小さな最適性証明書

容量が s→a:3s\to a:3、s→b:2s\to b:2、a→t:2a\to t:2、a→b:1a\to b:1、b→t:3b\to t:3 のネットワークを考えます。同じ順にフロー 3,2,2,1,33,2,2,1,3 を流すと、a,ba,b でフローが保存され、値は 5 です。カット S={s}S=\{s\}、T={a,b,t}T=\{a,b,t\} の容量も 3+2=53+2=5 です。フロー値とカット容量が一致するので、これ以上大きなフローも小さなカットもありません。

要点: フローは実現可能な輸送量、カットはボトルネックの容量です。残余ネットワークでの到達可能性から、両者の値が等しいことを証明するカットを得られます。