§E13.12最大フロー最小カット定理

最終更新

各弧に通過量の上限が定まった有限の有向ネットワークにおいて、湧点から吸点へ送ることのできる量の最大値を問う。送る量には二種類の制約がかかる。一つは弧ごとの容量制約であり、もう一つは湧点と吸点以外の頂点における保存則である。他方で、湧点側と吸点側を分ける頂点集合の切り分けを一つ固定すると、そこを越える弧の容量の総和が、送ることのできる量の上限を与える。本記事は、この二つの量、すなわち最大のフローの値と最小のカットの容量が、非負実容量のもとで必ず一致することを証明する。

証明は三段からなる。第一に、フロー全体が有限次元 Euclid 空間の空でない有界閉集合であり、フローの値がその上の連続関数であることを示して、最大フローの存在を保証する。第二に、フローから残余ネットワークを作り、そこに湧点から吸点への有向道が存在するならばフローの値を増やすことができることを示す。第三に、残余ネットワークで湧点から到達可能な頂点全体がカットを与え、その容量がちょうどフローの値に等しいことを示す。最後に、容量がすべて非負整数である場合について、増加を繰り返す手続きが有限回で停止することと、整数値をとる最大フローが存在することを導く。

本記事を通じて、グラフの基本的な語彙(頂点、辺、次数)は§D2.7 定義 1.1に従い、有向グラフ、有向道および到達可能性は§D2.11 定義 1.1に従う。ただし§D2.11 定義 1.1が有向グラフの要素を「辺」とよぶのに対し、本記事では向きと容量をもつ要素を弧とよび、集合をAAと書く。無向グラフの辺と区別するためである。すなわち有向グラフD=(V,A)D=(V,A)の弧集合AAは相異なる二頂点の順序対からなる集合であり、逆平行な弧の対(u,v)(u,v)と(v,u)(v,u)がともにAAに属することを許し、自己ループは考えない。頂点vvについて、vvを始点とする弧の集合をδ+(v)\delta^{+}(v)、vvを終点とする弧の集合をδ−(v)\delta^{-}(v)と書く。頂点集合S⊆VS\subseteq Vについて、始点がSSに属し終点がSSに属さない弧の集合をδ+(S)\delta^{+}(S)、終点がSSに属し始点がSSに属さない弧の集合をδ−(S)\delta^{-}(S)と書く。

1 ネットワークとフロー

定義 1.1. 有限有向グラフD=(V,A)D=(V,A)、相異なる二頂点s,t∈Vs,t\in V、および容量とよぶ写像c:A→[0,∞)c:A\to[0,\infty)の組(D,c,s,t)(D,c,s,t)をネットワーク (flow network) という。ssを湧点 (source)、ttを吸点 (sink) という。

写像f:A→Rf:A\to\mathbb Rがフロー (flow) であるとは、次の二条件を満たすことをいう。

  1. (容量制約)各a∈Aa\in Aについて0≤f(a)≤c(a)0\le f(a)\le c(a)が成り立つ。
  2. (保存則)各v∈V∖{s,t}v\in V\setminus\{s,t\}について ∑a∈δ−(v)f(a)=∑a∈δ+(v)f(a)\sum_{a\in\delta^{-}(v)}f(a)=\sum_{a\in\delta^{+}(v)}f(a) が成り立つ。

フローffの値 (value of a flow) を

val⁡(f)=∑a∈δ+(s)f(a)−∑a∈δ−(s)f(a)\operatorname{val}(f)=\sum_{a\in\delta^{+}(s)}f(a)-\sum_{a\in\delta^{-}(s)}f(a)

と定める。値が最大であるフロー、すなわち任意のフローf′f'についてval⁡(f′)≤val⁡(f)\operatorname{val}(f')\le\operatorname{val}(f)を満たすフローffを最大フロー (maximum flow) という。

フローが少なくとも一つ存在するかどうかは、この定義だけからは明らかでない。各弧で値00をとる写像がフローであることは命題 3.2の証明で確かめる。以下では、RA\mathbb R^{A}をすべての写像A→RA\to\mathbb Rのなす∣A∣\lvert A\rvert次元の実ベクトル空間とみなし、フロー全体の集合を

F={f∈RA: f はフローである}F=\{f\in\mathbb R^{A}:\ f\ \text{はフローである}\}

と書く。

2 カットとフローの値の上界

定義 2.1.s∈Ss\in Sかつt∈V∖St\in V\setminus Sを満たす頂点集合S⊆VS\subseteq Vを ss-ttカット (s-t cut) という。ss-ttカットSSの容量 (capacity) を

c(S)=∑a∈δ+(S)c(a)c(S)=\sum_{a\in\delta^{+}(S)}c(a)

と定める。容量が最小であるss-ttカットを最小カット (minimum cut) という。

ss-ttカットは湧点側と吸点側を分ける切り分けであり、その容量は切り分けを順方向に越えることのできる量の総和である。次の命題は、この見方を等式と不等式の形で確定する。等式の側は後の議論でも繰り返し用いる。

命題 2.2. 任意のフローffと任意のss-ttカットSSに対し

val⁡(f)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\operatorname{val}(f)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)

が成り立つ。とくにval⁡(f)≤c(S)\operatorname{val}(f)\le c(S)が成り立つ。

証明. 各頂点v∈Vv\in Vに対し

b(v)=∑a∈δ+(v)f(a)−∑a∈δ−(v)f(a)b(v)=\sum_{a\in\delta^{+}(v)}f(a)-\sum_{a\in\delta^{-}(v)}f(a)

と置く。保存則によりv∈V∖{s,t}v\in V\setminus\{s,t\}ではb(v)=0b(v)=0であり、値の定義によりb(s)=val⁡(f)b(s)=\operatorname{val}(f)である。SSはssを含みttを含まないので、SSの要素はssか、または保存則の成り立つ頂点である。したがって

∑v∈Sb(v)=b(s)=val⁡(f)\sum_{v\in S}b(v)=b(s)=\operatorname{val}(f)

が成り立つ。

左辺を弧ごとに数え直す。自己ループが無いので、弧a=(u,v)a=(u,v)の始点と終点は相異なる。aaが∑v∈Sb(v)\sum_{v\in S}b(v)へ寄与する仕方は次の四通りである。u∈Su\in Sかつv∈Sv\in Sのとき、b(u)b(u)に+f(a)+f(a)、b(v)b(v)に−f(a)-f(a)として現れて相殺する。u∈Su\in Sかつv∉Sv\notin Sのとき、すなわちa∈δ+(S)a\in\delta^{+}(S)のとき、b(u)b(u)に+f(a)+f(a)としてだけ現れる。u∉Su\notin Sかつv∈Sv\in Sのとき、すなわちa∈δ−(S)a\in\delta^{-}(S)のとき、b(v)b(v)に−f(a)-f(a)としてだけ現れる。u∉Su\notin Sかつv∉Sv\notin Sのとき、寄与は無い。したがって

∑v∈Sb(v)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\sum_{v\in S}b(v)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)

となり、主張の等式を得る。

不等式を示す。容量制約によりf(a)≥0f(a)\ge0であるから、右辺の第二の和は非負であり、これを落とすと上からの評価になる。さらに各a∈δ+(S)a\in\delta^{+}(S)でf(a)≤c(a)f(a)\le c(a)であるから

val⁡(f)≤∑a∈δ+(S)f(a)≤∑a∈δ+(S)c(a)=c(S)\operatorname{val}(f)\le\sum_{a\in\delta^{+}(S)}f(a)\le\sum_{a\in\delta^{+}(S)}c(a)=c(S)

が成り立つ。▨

この命題は、フローの値とカットの容量が一致する対を見つけることに意味を与える。そのような対が見つかれば、両者の最適性を他の候補と比べることなく確定することができるからである。この見通しは定理 5.1 (3)⇒\Rightarrow(1) の段で証明の形にする。同定理は、値と容量の一致が必ず起こることを主張する。

3 最大フローの存在

容量が非負の実数であるとき、フローの値がとりうる値の集合は上に有界な実数の集合であるから上限をもつ。しかし上限が実際に達成されること、すなわち最大フローが存在することは、この段階では分かっていない。そこで、フロー全体の集合がコンパクトであることと、フローの値が連続であることを示して最大値の存在を得る。

コンパクト性を用いるためには、まずフローの値が連続であることを確かめる必要がある。有限次元空間上の線形汎関数の連続性は上流の記事が扱っていないので、ここで示す。

補題 3.1.AAを有限集合とし、α∈RA\alpha\in\mathbb R^{A}を固定する。RA\mathbb R^{A}に Euclid 距離ρ2\rho_2を入れ、

L(x)=∑a∈Aα(a) x(a)L(x)=\sum_{a\in A}\alpha(a)\,x(a)

によってL:RA→RL:\mathbb R^{A}\to\mathbb Rを定める。このときLLは§E2.4 定義 1.1の意味で連続である。

証明.K=1+∑a∈A∣α(a)∣K=1+\sum_{a\in A}\lvert\alpha(a)\rvertと置く。K≥1>0K\ge1>0である。x,y∈RAx,y\in\mathbb R^{A}に対し、各a∈Aa\in Aについて

∣x(a)−y(a)∣≤(∑b∈A(x(b)−y(b))2)1/2=ρ2(x,y)\lvert x(a)-y(a)\rvert\le\Bigl(\sum_{b\in A}(x(b)-y(b))^{2}\Bigr)^{1/2}=\rho_2(x,y)

が成り立つ。三角不等式により

∣L(x)−L(y)∣=∣∑a∈Aα(a)(x(a)−y(a))∣≤∑a∈A∣α(a)∣ ∣x(a)−y(a)∣≤Kρ2(x,y)\lvert L(x)-L(y)\rvert=\Bigl\lvert\sum_{a\in A}\alpha(a)(x(a)-y(a))\Bigr\rvert \le\sum_{a\in A}\lvert\alpha(a)\rvert\,\lvert x(a)-y(a)\rvert \le K\rho_2(x,y)

を得る。ε>0\varepsilon>0に対してδ=ε/K>0\delta=\varepsilon/K>0と置けば、ρ2(x,y)<δ\rho_2(x,y)<\deltaのとき∣L(x)−L(y)∣<ε\lvert L(x)-L(y)\rvert<\varepsilonが成り立つ。したがってLLは各点で連続である。▨

命題 3.2. ネットワーク(D,c,s,t)(D,c,s,t)に対し、フロー全体の集合F⊆RAF\subseteq\mathbb R^{A}は空でない有界閉集合であり、val⁡:F→R\operatorname{val}:F\to\mathbb Rは連続である。従属選択公理を仮定すると、val⁡\operatorname{val}はFFの上で最大値をとる。すなわち最大フローが存在する。

証明.A=∅A=\emptysetのときはRA\mathbb R^{A}が一点集合であり、FFはその一点からなり、val⁡\operatorname{val}は00という値だけをとるので主張は成り立つ。以下A≠∅A\ne\emptysetとし、n=∣A∣≥1n=\lvert A\rvert\ge1と置く。

空でないこと。各弧で値00をとる写像はフローであるからF≠∅F\ne\emptysetである。

有界であること。C=max⁡a∈Ac(a)C=\max_{a\in A}c(a)と置く。f∈Ff\in Fならば各aaで0≤f(a)≤C0\le f(a)\le Cであるから

ρ2(f,0)=(∑a∈Af(a)2)1/2≤n C\rho_2(f,0)=\Bigl(\sum_{a\in A}f(a)^{2}\Bigr)^{1/2}\le\sqrt{n}\,C

が成り立つ。したがってFFは原点を中心とする半径n C+1\sqrt n\,C+1の開球に含まれ、有界である。

閉であること。各a∈Aa\in AについてΦa(x)=x(a)\Phi_a(x)=x(a)と置き、各v∈V∖{s,t}v\in V\setminus\{s,t\}について

Kv(x)=∑a∈δ−(v)x(a)−∑a∈δ+(v)x(a)K_v(x)=\sum_{a\in\delta^{-}(v)}x(a)-\sum_{a\in\delta^{+}(v)}x(a)

と置く。自己ループが無いのでδ−(v)\delta^{-}(v)とδ+(v)\delta^{+}(v)は交わらず、KvK_vは係数が11、−1-1または00である線形汎関数である。Φa\Phi_aも線形汎関数であるから、補題 3.1によりこれらはすべて連続である。

FFの補集合が開であることを示す。g∈RA∖Fg\in\mathbb R^{A}\setminus Fとすると、次の三つの場合のいずれかが起こる。

  • あるa0∈Aa_0\in AについてΦa0(g)<0\Phi_{a_0}(g)<0である。ε=−Φa0(g)>0\varepsilon=-\Phi_{a_0}(g)>0に対するΦa0\Phi_{a_0}の連続性のδ>0\delta>0をとると、ρ2(x,g)<δ\rho_2(x,g)<\deltaを満たすxxはΦa0(x)<Φa0(g)+ε=0\Phi_{a_0}(x)<\Phi_{a_0}(g)+\varepsilon=0を満たすので、x∉Fx\notin Fである。
  • あるa0∈Aa_0\in AについてΦa0(g)>c(a0)\Phi_{a_0}(g)>c(a_0)である。ε=Φa0(g)−c(a0)>0\varepsilon=\Phi_{a_0}(g)-c(a_0)>0に対するδ>0\delta>0をとると、ρ2(x,g)<δ\rho_2(x,g)<\deltaを満たすxxはΦa0(x)>Φa0(g)−ε=c(a0)\Phi_{a_0}(x)>\Phi_{a_0}(g)-\varepsilon=c(a_0)を満たすので、x∉Fx\notin Fである。
  • あるv0∈V∖{s,t}v_0\in V\setminus\{s,t\}についてKv0(g)≠0K_{v_0}(g)\ne0である。ε=∣Kv0(g)∣>0\varepsilon=\lvert K_{v_0}(g)\rvert>0に対するδ>0\delta>0をとると、ρ2(x,g)<δ\rho_2(x,g)<\deltaを満たすxxは∣Kv0(x)−Kv0(g)∣<ε\lvert K_{v_0}(x)-K_{v_0}(g)\rvert<\varepsilonを満たすのでKv0(x)≠0K_{v_0}(x)\ne0であり、x∉Fx\notin Fである。

いずれの場合もggの周りの開球がFFと交わらない。したがってFFの補集合は開であり、FFは閉である。

値の連続性。α(a)=1\alpha(a)=1(a∈δ+(s)a\in\delta^{+}(s)のとき)、α(a)=−1\alpha(a)=-1(a∈δ−(s)a\in\delta^{-}(s)のとき)、α(a)=0\alpha(a)=0(それ以外のとき)と定めると、自己ループが無いのでδ+(s)\delta^{+}(s)とδ−(s)\delta^{-}(s)は交わらず、α\alphaは矛盾なく定まる。このときval⁡(x)=∑aα(a)x(a)\operatorname{val}(x)=\sum_{a}\alpha(a)x(a)であるから、補題 3.1によりval⁡\operatorname{val}はRA\mathbb R^{A}上で連続である。連続性はε\varepsilonとδ\deltaによる条件であるから、定義域を部分集合FFへ制限したものも、FFにRA\mathbb R^{A}の距離を入れた部分空間の上で連続である。

結論。AAの要素に11からnnまで番号を付けると、RA\mathbb R^{A}は Euclid 距離を保ったままRn\mathbb R^{n}と同一視される。従属選択公理のもとで§E2.9 定理 4.3をRn\mathbb R^{n}の有界閉集合FFへ適用すると、FFはコンパクトである。ここで用いるコンパクト性も、次に用いる連続性も、距離から定まる位相についてのものである。実際、§E2.4 定義 1.1の意味での連続性は、§E2.4 定理 2.1により、開集合の逆像が開集合であることと同値であり、これが位相空間の写像としての連続性である。F≠∅F\ne\emptysetでありval⁡:F→R\operatorname{val}:F\to\mathbb Rは距離から定まる位相について連続であるから、§E2.19 定理 4.4によりval⁡\operatorname{val}はFFの上で最大値をとる。最大値を与えるf∈Ff\in Fが最大フローである。▨

4 残余ネットワークと増加道

フローが最大でないとき、どの方向へ量を動かせば値が増えるかを表すのが残余ネットワークである。弧aaについては、容量までの余裕c(a)−f(a)c(a)-f(a)の分だけ順方向へ増やすことができ、既に流れているf(a)f(a)の分だけ逆方向へ打ち消すことができる。この二種類の操作を、向きをもつ弧として一つのグラフにまとめる。

定義 4.1. ネットワーク(D,c,s,t)(D,c,s,t)とフローffに対し、残余ネットワーク (residual network)DfD_fを次のように定める。頂点集合はVVとする。各弧a=(u,v)∈Aa=(u,v)\in Aについて、

  1. c(a)−f(a)>0c(a)-f(a)>0であるとき、uuを始点としvvを終点とする順方向残余弧 (forward residual arc)a+a^{+}を置き、その残余容量 (residual capacity) をcf(a+)=c(a)−f(a)c_f(a^{+})=c(a)-f(a)と定める。
  2. f(a)>0f(a)>0であるとき、vvを始点としuuを終点とする逆方向残余弧 (backward residual arc)a−a^{-}を置き、その残余容量をcf(a−)=f(a)c_f(a^{-})=f(a)と定める。

残余弧は元の弧aaと向きの別によって区別する。すなわち残余弧は対(元の弧, 向き)で識別し、始点と終点が同じ二つの残余弧を同一視しない。したがってDfD_fは、始点と終点が同じ弧を複数もつことのある多重有向グラフであり、§D2.11 定義 1.1の有向グラフとは限らない。逆平行な弧の対(u,v)(u,v)、(v,u)(v,u)について両方向に残余がある場合に、実際にそのようなことが起こる。そこで、DfD_fにおける有向道と到達可能性を本記事が次のように定める。頂点がすべて相異なるように残余弧を順にたどってssからttへ至る列を増加道 (augmenting path) という。すなわち増加道とは、頂点の列s=w0,w1,…,wk=ts=w_0,w_1,\dots,w_k=t(w0,…,wkw_0,\dots,w_kは相異なる)と残余弧の列r1,…,rkr_1,\dots,r_kであって、各rir_iがwi−1w_{i-1}を始点、wiw_iを終点とするものである。同じ規約で、DfD_fにおいてssから到達可能 (reachable) な頂点を、ssから始まるこの形の列の終点として定める。増加道PPに対し

Δ(P)=min⁡{cf(r): r は P に現れる残余弧}\Delta(P)=\min\{c_f(r):\ r\ \text{は}\ P\ \text{に現れる残余弧}\}

をPPのボトルネック (bottleneck) という。残余弧の残余容量はいずれも正であるからΔ(P)>0\Delta(P)>0である。

この増加道は残余ネットワーク上の有向道であって、元のネットワークの有向道ではない。既に流れている弧を打ち消す逆方向残余弧を用いることができる点が、単純に空きのある弧をたどるだけの操作との違いである。

補題 4.2. フローffと増加道PPをとり、Δ=Δ(P)\Delta=\Delta(P)と置く。写像f′:A→Rf':A\to\mathbb Rを

f′(a)={f(a)+Δ(a+ が P に現れるとき),f(a)−Δ(a− が P に現れるとき),f(a)(それ以外のとき)f'(a)= \begin{cases} f(a)+\Delta & (a^{+}\ \text{が}\ P\ \text{に現れるとき}),\\ f(a)-\Delta & (a^{-}\ \text{が}\ P\ \text{に現れるとき}),\\ f(a) & (\text{それ以外のとき}) \end{cases}

で定める。このときf′f'はフローであり、val⁡(f′)=val⁡(f)+Δ\operatorname{val}(f')=\operatorname{val}(f)+\Deltaが成り立つ。

証明. f′f'が矛盾なく定まること。増加道PPの頂点はすべて相異なる。弧a=(u,v)a=(u,v)についてa+a^{+}とa−a^{-}がともにPPに現れたとすると、PPはuuからvvへの移動とvvからuuへの移動をともに含むので、uuとvvがそれぞれ二度現れることになり、頂点が相異なることに反する。また、同じ残余弧がPPに二度現れることも、頂点が相異なることに反する。したがって上の場合分けは重複せず、f′f'は矛盾なく定まる。

容量制約。PPに現れない弧ではf′=ff'=fであるから制約は保たれる。a+a^{+}がPPに現れるときはΔ≤cf(a+)=c(a)−f(a)\Delta\le c_f(a^{+})=c(a)-f(a)であるから

0≤f(a)≤f(a)+Δ=f′(a)≤c(a)0\le f(a)\le f(a)+\Delta=f'(a)\le c(a)

が成り立つ。a−a^{-}がPPに現れるときはΔ≤cf(a−)=f(a)\Delta\le c_f(a^{-})=f(a)であるから

0≤f(a)−Δ=f′(a)≤f(a)≤c(a)0\le f(a)-\Delta=f'(a)\le f(a)\le c(a)

が成り立つ。

保存則と値。各頂点wwについてb(w)=∑a∈δ+(w)f(a)−∑a∈δ−(w)f(a)b(w)=\sum_{a\in\delta^{+}(w)}f(a)-\sum_{a\in\delta^{-}(w)}f(a)と置き、f′f'について同様に定めたものをb′(w)b'(w)と書く。PPに現れる残余弧rrの始点をxx、終点をyyとすると、rrによる流量の変更がbbに与える差は次のとおりである。r=a+r=a^{+}かつa=(x,y)a=(x,y)のときはf(a)f(a)がΔ\Deltaだけ増え、a∈δ+(x)a\in\delta^{+}(x)かつa∈δ−(y)a\in\delta^{-}(y)であるから、b(x)b(x)はΔ\Deltaだけ増えb(y)b(y)はΔ\Deltaだけ減る。r=a−r=a^{-}かつa=(y,x)a=(y,x)のときはf(a)f(a)がΔ\Deltaだけ減り、a∈δ+(y)a\in\delta^{+}(y)かつa∈δ−(x)a\in\delta^{-}(x)であるから、やはりb(x)b(x)はΔ\Deltaだけ増えb(y)b(y)はΔ\Deltaだけ減る。いずれの場合も、残余弧の始点で+Δ+\Delta、終点で−Δ-\Deltaの差が生じる。

増加道をs=w0, r1, w1, …, rk, wk=ts=w_0,\,r_1,\,w_1,\,\dots,\,r_k,\,w_k=tと書く。各rir_iはwi−1w_{i-1}を始点、wiw_iを終点とする。頂点wiw_i(0<i<k0<i<k)はrir_iの終点かつri+1r_{i+1}の始点であるから、差の総和は−Δ+Δ=0-\Delta+\Delta=0でありb′(wi)=b(wi)=0b'(w_i)=b(w_i)=0となる。PPに現れない頂点では流量が変わらないのでb′=bb'=bである。よってf′f'は保存則を満たし、フローである。s=w0s=w_0はr1r_1の始点であって、どのrir_iの終点でもないからb′(s)=b(s)+Δb'(s)=b(s)+\Deltaであり、val⁡(f′)=val⁡(f)+Δ\operatorname{val}(f')=\operatorname{val}(f)+\Deltaを得る。▨

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

5.1 証明方針

三条件の同値性を、(1)⇒\Rightarrow(2)⇒\Rightarrow(3)⇒\Rightarrow(1) という巡回の形で示す。

(1)⇒\Rightarrow(2) は対偶をとる。増加道が存在すれば補題 4.2が値の大きいフローを与えるので、もとのフローは最大でない。

(3)⇒\Rightarrow(1) は命題 2.2の不等式から直ちに従う。

本質的な一手は (2)⇒\Rightarrow(3) にある。増加道が存在しないという仮定を、カットの構成へ翻訳する。残余ネットワークDfD_fにおいてssから到達可能な頂点全体をSSと置く。増加道が存在しないことはttがssから到達不能であることに他ならないから、SSはss-ttカットである。次にSSの境界を調べる。SSから出る弧に容量までの余裕が残っていれば、その順方向残余弧によって外側の頂点が到達可能になるので、余裕は残っていない。SSへ入る弧に正の流量があれば、その逆方向残余弧によって外側の頂点が到達可能になるので、流量は零である。この二つを命題 2.2の等式へ代入すると、val⁡(f)=c(S)\operatorname{val}(f)=c(S)が得られる。

最後に、最大フローと最小カットの値が一致することを述べるためには、最大フローが実在しなければならない。これは命題 3.2が与える。従属選択公理を用いる段はここだけであり、三条件の同値の証明には用いない。

定理 5.1 (最大フロー最小カット定理). 非負実容量の有限ネットワーク(D,c,s,t)(D,c,s,t)において、フローffについての次の三条件は同値である。

  1. ffは最大フローである。
  2. 残余ネットワークDfD_fにssからttへの増加道が存在しない。
  3. val⁡(f)=c(S)\operatorname{val}(f)=c(S)を満たすss-ttカットSSが存在する。

さらに、従属選択公理を仮定すると、最大フローの値と最小カットの容量は等しい。三条件の同値の証明は選択公理を用いず、最後の主張だけが命題 3.2を経由して従属選択公理を用いる。

証明. (1)⇒\Rightarrow(2). 対偶を示す。DfD_fに増加道PPが存在すると仮定する。補題 4.2により、val⁡(f′)=val⁡(f)+Δ(P)\operatorname{val}(f')=\operatorname{val}(f)+\Delta(P)を満たすフローf′f'が存在する。Δ(P)>0\Delta(P)>0であるからval⁡(f′)>val⁡(f)\operatorname{val}(f')>\operatorname{val}(f)となり、ffは最大フローではない。

(2)⇒\Rightarrow(3).DfD_fにおいてssから到達可能な頂点全体をSSと置く。長さ00の有向道によりs∈Ss\in Sである。仮定によりssからttへの有向道は存在しないのでt∉St\notin Sである。したがってSSはss-ttカットである。

a=(u,v)∈δ+(S)a=(u,v)\in\delta^{+}(S)をとる。u∈Su\in Sかつv∉Sv\notin Sである。もしf(a)<c(a)f(a)<c(a)であるとすると、順方向残余弧a+a^{+}がDfD_fに存在し、uuからvvへ移ることができるのでv∈Sv\in Sとなって矛盾する。よってf(a)=c(a)f(a)=c(a)である。

a=(v,u)∈δ−(S)a=(v,u)\in\delta^{-}(S)をとる。u∈Su\in Sかつv∉Sv\notin Sである。もしf(a)>0f(a)>0であるとすると、逆方向残余弧a−a^{-}がuuを始点としvvを終点としてDfD_fに存在するのでv∈Sv\in Sとなって矛盾する。よってf(a)=0f(a)=0である。

これらを命題 2.2の等式へ代入すると

val⁡(f)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)=∑a∈δ+(S)c(a)−0=c(S)\operatorname{val}(f)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a) =\sum_{a\in\delta^{+}(S)}c(a)-0=c(S)

を得る。

(3)⇒\Rightarrow(1).val⁡(f)=c(S)\operatorname{val}(f)=c(S)を満たすss-ttカットSSをとる。任意のフローf′f'について命題 2.2によりval⁡(f′)≤c(S)=val⁡(f)\operatorname{val}(f')\le c(S)=\operatorname{val}(f)が成り立つので、ffは最大フローである。

最大フローと最小カットの一致。命題 3.2により最大フローf∗f^{*}が存在する。(1)⇒\Rightarrow(2)⇒\Rightarrow(3)によりval⁡(f∗)=c(S∗)\operatorname{val}(f^{*})=c(S^{*})を満たすss-ttカットS∗S^{*}が存在する。任意のss-ttカットS′S'について命題 2.2によりc(S′)≥val⁡(f∗)=c(S∗)c(S')\ge\operatorname{val}(f^{*})=c(S^{*})であるから、S∗S^{*}は最小カットであり、最大フローの値と最小カットの容量はともにval⁡(f∗)\operatorname{val}(f^{*})に等しい。▨

6 Ford–Fulkerson 法と整数性

定理の (2)⇒\Rightarrow(1) は、増加道が見つからなくなるまで増加を繰り返す手続きが最大フローを与えることを意味する。ただし停止することは別に示す必要がある。ここでは容量がすべて非負整数である場合に停止性を証明する。

命題 6.1. ネットワーク(D,c,s,t)(D,c,s,t)の容量がすべて非負整数であるとする。各弧で値00をとるフローffから出発し、残余ネットワークDfD_fに増加道が存在するかぎり、増加道を一つ選んで補題 4.2の増加操作を行い、その結果を新しいffとする手続きを Ford–Fulkerson 法という。この手続きは有限回の反復で停止し、停止時のフローは各弧で整数値をとる最大フローである。

証明. 不変条件。ループ不変条件(§D2.8 定義 1.1)として「現在のffはフローであり、各弧で整数値をとる」をとる。初期化では、各弧で値00をとる写像がフローであり整数値をとるので成り立つ。維持を示す。ffが整数値をとるフローであるとき、各弧aaでc(a)−f(a)c(a)-f(a)とf(a)f(a)はともに整数であるから、残余容量はすべて正の整数であり、選んだ増加道PPのボトルネックΔ(P)\Delta(P)は正の整数である。補題 4.2により増加操作の結果f′f'はフローであり、各弧でf′(a)f'(a)はf(a)f(a)に整数を加えるか引くかしたものであるから整数値をとる。よって不変条件は保たれる。

停止性。S0={s}S_0=\{s\}と置くと、s≠ts\ne tであるからS0S_0はss-ttカットである。容量が整数であるからc(S0)c(S_0)は非負整数である。ループの状態に対して

Φ=c(S0)−val⁡(f)\Phi=c(S_0)-\operatorname{val}(f)

と定める。ここでΦ\Phiは変量を表す記号であり、頂点集合VVとは無関係である。不変条件によりval⁡(f)\operatorname{val}(f)は整数であり、命題 2.2によりval⁡(f)≤c(S0)\operatorname{val}(f)\le c(S_0)であるから、Φ\Phiは非負整数である。本体を一度実行すると、上に述べたとおりΔ(P)\Delta(P)は正の整数であるからval⁡(f)\operatorname{val}(f)は11以上増え、Φ\Phiは狭義に減少する。したがって§D2.8 命題 1.4により手続きは有限回の反復で停止する。

終了。停止時にはループの継続条件が偽であり、残余ネットワークに増加道が存在しない。不変条件により停止時のffはフローであって各弧で整数値をとるから、定理 5.1 (2)⇒\Rightarrow定理 5.1 (1)によりffは整数値をとる最大フローである。以上の三段は§D2.8 定理 1.2の形の議論であり、手続きは停止して最大フローを返す。▨

注意 6.2 (無理数の容量と停止性). 容量が無理数を含む場合、増加道の選び方によっては Ford–Fulkerson 法が停止せず、しかもフローの値が最大フローの値へ収束しない例が存在する。本記事はこの例を構成せず、参考文献に挙げた研究へ委ねる。したがって、この注意の内容を本記事の他の主張の根拠として用いない。停止性の議論は容量が整数であることに依存しており、定理 5.1の主張そのものとは別の事柄である。同定理は非負実容量のもとで成り立ち、その証明は手続きの停止性を用いていない。

系 6.3 (整数性定理). ネットワークの容量がすべて非負整数であるとき、各弧で整数値をとる最大フローが存在する。

証明.命題 6.1により、Ford–Fulkerson 法は有限回で停止し、停止時のフローは各弧で整数値をとる最大フローである。これが求める最大フローである。▨

7 検算例

例 7.1 (4 頂点ネットワークの最大フローと最小カット). 頂点集合を{s,a,b,t}\{s,a,b,t\}とし、弧と容量を

c(s,a)=3,c(s,b)=2,c(a,b)=1,c(a,t)=2,c(b,t)=3c(s,a)=3,\quad c(s,b)=2,\quad c(a,b)=1,\quad c(a,t)=2,\quad c(b,t)=3

と定める。各弧で値00をとるフローから出発して増加操作を三度行う。

  1. 増加道s→a→ts\to a\to tをとる。ボトルネックはmin⁡{3,2}=2\min\{3,2\}=2であり、この道に沿って22を流す。
  2. 増加道s→b→ts\to b\to tをとる。ボトルネックはmin⁡{2,3}=2\min\{2,3\}=2であり、この道に沿って22を流す。
  3. 増加道s→a→b→ts\to a\to b\to tをとる。残余容量は順に3−2=13-2=1、1−0=11-0=1、3−2=13-2=1であるからボトルネックは11であり、この道に沿って11を流す。

得られたフローは

f(s,a)=3,f(s,b)=2,f(a,b)=1,f(a,t)=2,f(b,t)=3f(s,a)=3,\quad f(s,b)=2,\quad f(a,b)=1,\quad f(a,t)=2,\quad f(b,t)=3

であり、値はval⁡(f)=f(s,a)+f(s,b)=3+2=5\operatorname{val}(f)=f(s,a)+f(s,b)=3+2=5である。この例では、5本の弧のすべてで流量が容量に等しい。保存則を確かめると、頂点aaでは入る量が33、出る量がf(a,b)+f(a,t)=1+2=3f(a,b)+f(a,t)=1+2=3であり、頂点bbでは入る量がf(s,b)+f(a,b)=2+1=3f(s,b)+f(a,b)=2+1=3、出る量がf(b,t)=3f(b,t)=3である。吸点ttへ入る量はf(a,t)+f(b,t)=2+3=5f(a,t)+f(b,t)=2+3=5であり、値と一致する。

このフローの残余ネットワークでは、ssを始点とする順方向残余弧が存在しない。c(s,a)−f(s,a)=0c(s,a)-f(s,a)=0かつc(s,b)−f(s,b)=0c(s,b)-f(s,b)=0であり、ssを終点とする弧が無いのでssを始点とする逆方向残余弧も存在しないからである。したがってssから到達可能な頂点はssだけであり、定理 5.1の証明が与えるカットはS={s}S=\{s\}である。その容量はc(s,a)+c(s,b)=3+2=5c(s,a)+c(s,b)=3+2=5であり、val⁡(f)=5\operatorname{val}(f)=5と一致する。

他のss-ttカットの容量も数える。S={s,a}S=\{s,a\}ではδ+(S)={(s,b),(a,b),(a,t)}\delta^{+}(S)=\{(s,b),(a,b),(a,t)\}であり容量は2+1+2=52+1+2=5である。S={s,b}S=\{s,b\}ではδ+(S)={(s,a),(b,t)}\delta^{+}(S)=\{(s,a),(b,t)\}であり容量は3+3=63+3=6である。S={s,a,b}S=\{s,a,b\}ではδ+(S)={(a,t),(b,t)}\delta^{+}(S)=\{(a,t),(b,t)\}であり容量は2+3=52+3=5である。いずれも55以上であり、最小カットの容量が55であることと整合する。容量がすべて整数であり、得られたフローも整数値をとるので、系 6.3とも整合する。

8 演習

問題 8.1.

  1. 命題 2.2の等式の証明で、両端がSSに属する弧の寄与が相殺することを、弧a=(u,v)a=(u,v)がb(u)b(u)とb(v)b(v)のどちらへどの符号で現れるかを明示して書き下せ。さらに、自己ループを許した場合にこの数え直しのどこが成り立たなくなるかを述べよ。
  2. 補題 4.2の証明は、増加道の頂点がすべて相異なることを二箇所で用いている。その二箇所を指摘し、頂点の重複を許した残余弧の列に対して同じ定義を用いるとf′f'の容量制約が破れる例を、具体的なネットワークとフローによって構成せよ。
  3. 定理 5.1 (2)⇒\Rightarrow(3) で構成したカットSSが最小カットであることを、命題 2.2だけを用いて示せ。
  4. 命題 3.2の証明において、容量制約の上限f(a)≤c(a)f(a)\le c(a)を課さず保存則と非負性だけを課した集合を考えると、有界性の証明のどこが成り立たなくなるかを述べ、その集合が有界でない具体例を挙げよ。
  5. 容量がすべて非負の有理数であるとき、Ford–Fulkerson 法が有限回で停止することを、命題 6.1の証明の不変条件と変量をどう取り替えればよいかを示したうえで証明せよ。

10 扱った範囲と次の記事

本記事は、非負実容量の有限ネットワークについて最大フローの存在を示し、最大フロー最小カット定理を完全に証明した。容量がすべて非負整数である場合について、Ford–Fulkerson 法の停止性と整数値をとる最大フローの存在を導いた。増加道の選び方に応じた反復回数の上界、一般の線形計画双対性、係数行列の全単模性および二部マッチングへの帰着は扱っていない。次の記事では、有限二部グラフについて交互道と増加道を定義し、増加道が存在しないことによる最大マッチングの特徴づけと、最大マッチングの辺数と最小頂点被覆の頂点数が等しいことを証明する。

参考文献

  1. Reinhard Diestel, Graph Theory, 6th ed., Graduate Texts in Mathematics 173, Springer, Berlin, 2025.弧ごとの流量による定式化と、最大フロー最小カット定理の証明の構成を参考にした。
  2. Bernhard Korte and Jens Vygen, Combinatorial Optimization: Theory and Algorithms, 6th ed., Algorithms and Combinatorics, Springer, 2018.残余ネットワークと増加道による証明、および整数容量における Ford–Fulkerson 法の停止性を参考にした。
  3. Uri Zwick, The smallest networks on which the Ford–Fulkerson maximum flow procedure may fail to terminate, Theoretical Computer Science 148 (1995), 165–170.無理数の容量に対して Ford–Fulkerson 法が停止しない例が存在することを参考にした。

前提記事