ネットワークフロー(network flow)とは、弧に容量の付いた有向グラフの上で、各頂点での出入りの釣り合いと各弧の容量制約を守りながら入口 $s$ から出口 $t$ へ物を流す方法と、その流量の最大値を調べる理論である。中心にあるのは、最大流の流量が最小カットの容量に等しいという最大流最小カット定理で、容量が整数なら整数値の最大流がある。フローは $s$ から $t$ への有向道と有向閉路に分解でき、ここから互いに交わらない道の最大本数を切断の最小の大きさで表す Menger の定理が導かれる。最短の増加道を選ぶ方法は、容量が実数でも頂点数と弧数の積以下の回数で最大流に到達する。
ネットワークフロー(network flow)とは、各辺に容量(通せる量の上限)の付いた有向グラフの上で、入口から出口へ物を流す方法とその最大量を調べる理論である。水道管や通信網、輸送路の上の流れを抽象化したもので、各頂点で「入る量と出る量が等しい」ことと各辺で「容量を超えない」ことだけを要求する。中心にあるのは、流せる量の最大値(最大流)が、網を入口側と出口側に切り分けるときに切られる辺の容量の和の最小値(最小カット)に等しいという最大流最小カット定理である。
この記事では、ネットワークとフローの言葉を整えて最大流最小カット定理と整数性定理を証明し(thm-nf-maxflow-mincut、thm-nf-integrality)、さらに、フローが入口から出口への道と閉路に分解されること(thm-nf-decomposition)、それを使って互いに交わらない道の最大本数を切断の最小の大きさで表す Menger の定理が導かれること(thm-nf-menger-arc、thm-nf-menger-undirected)、増加道として最短のものを選べば、容量が整数でなくても有限回で最大流に到達すること(thm-nf-edmonds-karp)を証明する。
この記事の有向グラフは、有限集合 $V$ を頂点集合、有限集合 $A$ を弧(有向辺)の集合とし、各弧 $a$ に始点と終点(相異なる 2 頂点)を与えたものである。同じ始点と終点をもつ弧が複数あってもよい。頂点の集合 $S\subset V$ について、始点が $S$ に、終点が $V\setminus S$ にある弧の集合を $\delta^+(S)$、始点が $V\setminus S$ に、終点が $S$ にある弧の集合を $\delta^-(S)$ と書き、$\delta^{\pm}(v):=\delta^{\pm}(\{v\})$ とする。写像 $g\colon A\to\mathbb{R}$ と $B\subset A$ に対し $g(B):=\sum_{a\in B}g(a)$ と書く。
ネットワーク $N=(V,A,s,t,c)$ とは、上の有向グラフ $(V,A)$、相異なる 2 頂点 $s$(入口、source)と $t$(出口、sink)、および容量 $c\colon A\to\mathbb{R}_{\ge0}$ の組である。
この定義は 組合せ最適化 の記事の定義「ネットワーク・フロー・カット」と同じである。すべての頂点 $v$ について $f(\delta^+(v))-f(\delta^-(v))$ を足すと、各弧が始点で $+$、終点で $-$ と 1 回ずつ数えられて $0$ になる。保存則により $s,t$ 以外の頂点の項は $0$ なので、$t$ では $f(\delta^-(t))-f(\delta^+(t))=\operatorname{val}(f)$ であり、流量は「出口に正味で流れ込む量」でもある。
流れを増やす余地を見るには、次のネットワークを使う。
フロー $f$ に対し、各弧 $a$(始点 $u$、終点 $w$)から、次の 2 種類の残余弧を作る。
$R_f$ の $s$ から $t$ への有向道を $f$ の増加道(augmenting path)という。組合せ最適化 の記事の定義「増加道」と同じものである。
以下の証明では、弧の列で表した道と閉路を使う。有向グラフ $(V,A)$ の $s$–$t$ 有向道とは、相異なる頂点 $s=v_0,v_1,\dots,v_k=t$ と、$v_{i-1}$ から $v_i$ への弧 $a_i$ の列 $(a_1,\dots,a_k)$ のことであり、有向閉路とは、相異なる頂点 $v_0,\dots,v_{k-1}$($k\ge2$)と、$v_{i-1}$ から $v_i$ への弧 $a_i$($v_k:=v_0$)の列 $(a_1,\dots,a_k)$ のことである。どちらでも弧 $a_1,\dots,a_k$ は相異なる。道や閉路 $P$ に対し、$P$ の弧で $1$、それ以外の弧で $0$ をとる写像を $\chi_P\colon A\to\mathbb{R}$ と書く。
最大流の流量を上から抑えるのは、次の等式と不等式である。
任意のフロー $f$ と任意のカット $S$ について
$$
\operatorname{val}(f)=f(\delta^+(S))-f(\delta^-(S))\le c(S)
$$
が成り立つ。
要点:$S$ の各頂点で「出る量 − 入る量」を足すと、$S$ の内部の弧が打ち消し合う。
保存則により、$v\in S\setminus\{s\}$ では $f(\delta^+(v))-f(\delta^-(v))=0$ である($t\notin S$ に注意)。よって $\operatorname{val}(f)=\sum_{v\in S}\bigl(f(\delta^+(v))-f(\delta^-(v))\bigr)$ である。右辺で、始点と終点がともに $S$ にある弧 $a$ は、始点の項で $+f(a)$、終点の項で $-f(a)$ として現れて打ち消し合う。残るのは $S$ から出る弧の $+f(a)$ と $S$ に入る弧の $-f(a)$ だけなので、右辺は $f(\delta^+(S))-f(\delta^-(S))$ に等しい。容量制約から $f(\delta^+(S))\le c(\delta^+(S))=c(S)$、$f(\delta^-(S))\ge0$ である。$\square$
流量を増やす手がかりは増加道である。
$P$ を $f$ の増加道とし、$\varepsilon>0$ を $P$ の残余弧の残余容量の最小値とする。$P$ が $a^+$ を含む弧 $a$ では $f'(a):=f(a)+\varepsilon$、$a^-$ を含む弧では $f'(a):=f(a)-\varepsilon$、それ以外の弧では $f'(a):=f(a)$ と定めると、$f'$ はフローで $\operatorname{val}(f')=\operatorname{val}(f)+\varepsilon$ である。
要点:増加道の内側の頂点では、前後 2 本の残余弧による変化が打ち消し合う。
$P$ の頂点は相異なるので、$a^+$(始点から終点へ)と $a^-$(終点から始点へ)が両方 $P$ に現れることはなく、$f'$ は矛盾なく定まる。$\varepsilon$ の選び方から $0\le f'\le c$ である。$P$ の内側の頂点 $v$ には $P$ の残余弧が 1 本入り 1 本出る。$v$ に入る残余弧が $a^+$ なら $a$ は $v$ に入る弧で、$v$ に入る量が $\varepsilon$ 増える。$a^-$ なら $a$ は $v$ から出る弧で、$v$ から出る量が $\varepsilon$ 減る。どちらでも「出る量 − 入る量」が $\varepsilon$ 減る。同様に $v$ から出る残余弧は「出る量 − 入る量」を $\varepsilon$ 増やす。よって $v$ で保存則が保たれる。$s$ からは $P$ の残余弧が 1 本出るだけなので、$s$ の「出る量 − 入る量」すなわち流量は $\varepsilon$ 増える。$\square$
ネットワーク $N$ には最大流が存在する。フロー $f$ について、次の 3 条件は同値である。
(a) $f$ は最大流である。
(b) $f$ の増加道($R_f$ の $s$ から $t$ への有向道)は存在しない。
(c) $\operatorname{val}(f)=c(S)$ となるカット $S$ が存在する。
特に、最大流の流量は最小カットの容量に等しい。
最大流の存在。 フロー全体の集合 $\Phi\subset\mathbb{R}^A$ は、不等式 $0\le f(a)\le c(a)$ と保存則の等式で定まるので閉集合であり、各成分が $[0,c(a)]$ に入るので有界である。コンパクト空間 の定理「有界閉集合とコンパクト性の一致」により $\Phi$ はコンパクトで、零フロー(すべての弧で $0$)を含むので空でない。$\operatorname{val}$ は 1 次式なので連続であり、同じ記事の定理「最大値・最小値の存在」により $\Phi$ 上で最大値をとる。
(a) ⇒ (b)。 増加道があれば、lem-nf-augment により流量のより大きいフローがあるので、$f$ は最大流でない。
(b) ⇒ (c)。 $R_f$ で $s$ から有向道で到達できる頂点($s$ 自身を含む)全体を $S$ とする。増加道がないので $t\notin S$ であり、$S$ はカットである。$a\in\delta^+(S)$ を $u\in S$ から $w\notin S$ への弧とする。$f(a)< c(a)$ なら $R_f$ に $u$ から $w$ への残余弧 $a^+$ があり、$s$ から $u$ への有向道の後に $a^+$ をつなぐと $w$ に到達できて $w\notin S$ に反する($w$ はその道の頂点でないので、つないだ列も有向道である)。よって $f(a)=c(a)$ である。$a\in\delta^-(S)$ を $w\notin S$ から $u\in S$ への弧とすると、同様に、$f(a)>0$ なら $u$ から $w$ への残余弧 $a^-$ があって矛盾するので、$f(a)=0$ である。lem-nf-weak-duality の等式から $\operatorname{val}(f)=c(\delta^+(S))-0=c(S)$ である。
(c) ⇒ (a)。 任意のフロー $f'$ について、lem-nf-weak-duality により $\operatorname{val}(f')\le c(S)=\operatorname{val}(f)$ である。
最後の主張。 最大流 $f$ をとると、(a) ⇒ (b) ⇒ (c) により $\operatorname{val}(f)=c(S)$ となるカット $S$ がある。lem-nf-weak-duality によりどのカットの容量も $\operatorname{val}(f)$ 以上なので、$c(S)$ は最小カットの容量であり、両者は等しい。$\square$
容量がすべて整数のネットワークでは、零フローから始めて、増加道があるかぎり lem-nf-augment の改善を繰り返すと、高々 $c(\delta^+(s))$ 回で止まり、止まったときのフローはすべての弧で整数値をとる最大流である。特に、整数値の最大流が存在する。
$f$ が整数値のフローなら、残余容量 $c(a)-f(a)$、$f(a)$ はすべて整数なので、増加道の $\varepsilon$ は正の整数、すなわち $1$ 以上であり、改善後の $f'$ も整数値である。零フローは整数値なので、手順中のフローはすべて整数値で、流量は 1 回ごとに $1$ 以上増える。一方、カット $\{s\}$ に lem-nf-weak-duality を使うと、流量はつねに $c(\delta^+(s))$ 以下である。零フローの流量は $0$ なので、改善は高々 $c(\delta^+(s))$ 回で、その後は増加道がない。thm-nf-maxflow-mincut の (b) ⇒ (a) により、止まったときのフローは最大流である。$\square$
同じ内容は 組合せ最適化 の記事の補題「フローとカット」「増加道による改善」、定理「最大流最小カット定理」「整数性定理」にもある。最大流最小カット定理は Ford と Fulkerson による(BM76 Theorem 11.3、p. 198。同書は増加道を探すラベル付けの方法も同じ 2 人によるものとして紹介している)。最大流と、それと同じ容量のカットを並べて示せば、他のフローを 1 つも調べずに最適性が確かめられる。最大流の存在は、コンパクト性を使わずに、この記事の thm-nf-edmonds-karp からも従う。容量が整数でないと、整数値の最大流があるとは限らない(弧 $s\to t$ が 1 本で容量 $\frac12$ なら最大流の流量は $\frac12$ である)。
フローは「各交差点で出入りが釣り合い、各道路で上限を守る交通」である。入口から出口へ流せる量は、どこかの「くびれ」で決まる。網を入口側 $S$ と出口側に分けると、入口から出口へ行く流れはどこかで $S$ の外へ出る弧を通るので、流量はそれらの弧の容量の和を超えない。最大流最小カット定理は、最も細いくびれでちょうど等号が成り立つことを主張する。
流れを道の束として見ることもできる。保存則を満たす流れは、入口から出口へ向かう何本かの道と、どこにも出入りしない渦(閉路)を重ねたものに分解できる(thm-nf-decomposition)。容量がすべて $1$ なら、整数値の最大流は互いに弧を共有しない道の束になり、最大流最小カット定理は「交わらない道の本数」と「道をすべて断つのに必要な弧の本数」が等しいという組合せ論の定理に化ける。これが Menger の定理である。
頂点 $s,a,b,t$ と弧 $s\to a$(容量 $2$)、$s\to b$($1$)、$a\to b$($1$)、$a\to t$($1$)、$b\to t$($2$)のネットワークで、道 $s\to a\to t$ に $1$ だけ流したフロー $f$ を考える(他の弧では $0$)。流量は $1$ である。$R_f$ の残余弧は、$s\to a$(残余容量 $1$)、$a\to s$($1$)、$s\to b$($1$)、$a\to b$($1$)、$t\to a$($1$)、$b\to t$($2$)である。$a\to t$ は満杯なので順方向の残余弧はない。$R_f$ には $s\to a\to b\to t$ と $s\to b\to t$ の有向道があり、それぞれで $1$ ずつ流量を増やせる。両方を行うと $f(s\to a)=2$、$f(s\to b)=1$、$f(a\to b)=1$、$f(a\to t)=1$、$f(b\to t)=2$ の流量 $3$ のフローになる。カット $\{s\}$ の容量は $2+1=3$ なので、これは最大流であり、$\{s\}$ は最小カットである。
頂点 $s,a,b,t$ と弧 $s\to a$、$a\to b$、$b\to a$、$a\to t$(容量はすべて $2$)のネットワークで、$f(s\to a)=1$、$f(a\to b)=1$、$f(b\to a)=1$、$f(a\to t)=1$ はフローである($a$ に入る量 $1+1$ と出る量 $1+1$、$b$ に入る量 $1$ と出る量 $1$ が等しい)。これは $s$–$t$ 有向道 $(s\to a,\ a\to t)$ と有向閉路 $(a\to b,\ b\to a)$ に $1$ ずつ流したものの和であり、流量 $1$ は道の部分だけから来る。閉路の部分は流量を変えないので、取り除いても流量 $1$ のフローのままである。
入口が複数ある場合は、新しい頂点 $s^*$ と、$s^*$ から各入口への弧(容量は全容量の和など十分大きな値)を加え、$s^*$ を入口とすればよい。出口が複数ある場合も同様である。頂点にも通過量の上限 $m(v)$ がある場合は、$v$ を 2 頂点 $v^-,v^+$ に分け、$v$ に入る弧の終点を $v^-$、出る弧の始点を $v^+$ に付け替え、容量 $m(v)$ の弧 $v^-\to v^+$ を加えればよい(BM76 Exercise 11.3.5、p. 203)。この頂点を分ける操作は、頂点版の Menger の定理の証明(thm-nf-menger-undirected)でも使う。
すべての頂点で保存則が成り立つ写像 $g\colon A\to\mathbb{R}_{\ge0}$(入口・出口を特別扱いしない)を循環(circulation)という。
$g$ を有向グラフ $(V,A)$ 上の循環とし、$g(a)>0$ となる弧の個数を $r$ とする。このとき、有向閉路 $C_1,\dots,C_q$($q\le r$)と正の実数 $\mu_1,\dots,\mu_q$ で
$$
g=\sum_{j=1}^{q}\mu_j\chi_{C_j}
$$
となるものが存在する。$g$ が整数値なら $\mu_j$ はすべて整数にとれる。
$r$ に関する帰納法で示す。$r=0$ なら $g=0$ で、$q=0$ とすればよい。$r\ge1$ とし、$g(a_1)>0$ となる弧 $a_1$ をとり、その始点を $w_0$、終点を $w_1$ とする。$w_i$ が $g(a_i)>0$ となる弧 $a_i$ の終点として得られたとき、$w_i$ に入る量 $g(\delta^-(w_i))$ は正であり、保存則により出る量 $g(\delta^+(w_i))$ も正なので、$g(a_{i+1})>0$ となる $w_i$ から出る弧 $a_{i+1}$ がとれる。その終点を $w_{i+1}$ とする。$V$ は有限なので、$w_j=w_i$ となる $i< j$ が現れる。最初に現れるそのような $j$ をとると、$w_i,\dots,w_{j-1}$ は相異なり、$C:=(a_{i+1},\dots,a_j)$ は有向閉路である(弧はループでないので $j-i\ge2$)。
$\mu:=\min\{g(a)\mid a\in C\}>0$ とし、$g':=g-\mu\chi_C$ とおく。$\mu$ の選び方から $g'\ge0$ である。$C$ の各頂点には $C$ の弧がちょうど 1 本入り 1 本出るので、$\chi_C$ はすべての頂点で保存則を満たし、$g'$ も循環である。$g'(a)>0$ となる弧の個数は、最小値をとる弧で $g'=0$ となるので $r-1$ 以下である。帰納法の仮定を $g'$ に用いれば $g$ の分解が得られる。$g$ が整数値なら $\mu$ は整数で、$g'$ も整数値である。$\square$
$f$ をネットワーク $N=(V,A,s,t,c)$ のフローとし、$\operatorname{val}(f)\ge0$ とする。このとき、$s$–$t$ 有向道 $P_1,\dots,P_p$、有向閉路 $C_1,\dots,C_q$($p+q\le|A|+1$)と正の実数 $\lambda_i,\mu_j$ で
$$
f=\sum_{i=1}^{p}\lambda_i\chi_{P_i}+\sum_{j=1}^{q}\mu_j\chi_{C_j},\qquad \sum_{i=1}^{p}\lambda_i=\operatorname{val}(f)
$$
となるものが存在する。$f$ が整数値なら、$\lambda_i,\mu_j$ はすべて整数にとれる。
$t$ から $s$ への新しい弧 $a^*$ を加えた有向グラフ $(V,A\cup\{a^*\})$ を考え、$g:=f$($A$ の上)、$g(a^*):=\operatorname{val}(f)$ と定める。$g\ge0$ である。$s,t$ 以外の頂点では $f$ の保存則がそのまま成り立つ。$s$ では出る量と入る量の差が $\operatorname{val}(f)-g(a^*)=0$ である。$t$ では、定義の後で見たように $f(\delta^-(t))-f(\delta^+(t))=\operatorname{val}(f)$ なので、出る量 $f(\delta^+(t))+g(a^*)$ と入る量 $f(\delta^-(t))$ が等しい。よって $g$ は循環である。
lem-nf-circulation により $g=\sum_j\mu_j\chi_{C_j}$($C_j$ は $(V,A\cup\{a^*\})$ の有向閉路、個数は $|A|+1$ 以下)と書ける。有向閉路の弧は相異なるので、各 $C_j$ は $a^*$ を高々 1 回含む。$a^*$ を含む閉路は、$a^*$ の終点 $s$ から始めて並べ直すと「$s$ から $t$ への有向道に $a^*$ を付けたもの」なので、$a^*$ を除いた部分は $N$ の $s$–$t$ 有向道である。これらを $P_i$、その係数を $\lambda_i$ とする。$a^*$ を含まない閉路は $(V,A)$ の有向閉路である。$A$ の上で $g=f$ なので求める等式が得られ、$a^*$ での値を比べると $\sum_i\lambda_i=g(a^*)=\operatorname{val}(f)$ である。整数性は lem-nf-circulation から従う。$\square$
分解に現れる閉路の部分 $\sum_j\mu_j\chi_{C_j}$ を取り除いても、容量制約と保存則は保たれ、流量は変わらない。また、最大流 $f$ に、すべての弧で正の値をとる有向閉路 $C$ があれば、$C$ の弧の値の最小値 $\mu$ を引いた $f-\mu\chi_C$ も同じ流量のフローで($\chi_C$ はすべての頂点で保存則を満たす)、正の値をとる弧の個数が減る。これを高々 $|A|$ 回繰り返せば、すべての弧で正の値をとる有向閉路をもたない最大流が得られる。
容量がすべて $1$ のとき、整数値の最大流は互いに弧を共有しない道の束になる。有向グラフの 2 本の $s$–$t$ 有向道が弧素(arc-disjoint)であるとは、共通の弧をもたないことをいう。
有向グラフ $(V,A)$ の相異なる頂点 $s,t$ について、互いに弧素な $s$–$t$ 有向道の最大本数は、取り除くと $s$ から $t$ への有向道がなくなる弧の集合の最小の大きさに等しい。
互いに弧素な $s$–$t$ 有向道の最大本数を $k$、取り除くと $s$–$t$ 有向道がなくなる弧の集合の最小の大きさを $l$ とする。そのような弧の集合 $Z$ は、$k$ 本の弧素な道のそれぞれと交わり、道どうしは弧を共有しないので、$|Z|\ge k$ である。よって $k\le l$ である。
逆を示す。すべての弧の容量を $1$ としたネットワークを考え、thm-nf-integrality により整数値の最大流 $f$ をとり、thm-nf-maxflow-mincut により $\operatorname{val}(f)=c(S)$ となるカット $S$ をとる。$s$–$t$ 有向道は $s\in S$ から始まり $t\notin S$ で終わるので、$S$ から外へ出る弧、すなわち $\delta^+(S)$ の弧を必ず含む。よって $\delta^+(S)$ を取り除くと $s$–$t$ 有向道はなくなり、$l\le|\delta^+(S)|=c(S)=\operatorname{val}(f)$ である。
零フローの流量は $0$ なので $\operatorname{val}(f)\ge0$ であり、thm-nf-decomposition により $f=\sum_i\lambda_i\chi_{P_i}+\sum_j\mu_j\chi_{C_j}$($\lambda_i,\mu_j$ は正の整数、$\sum_i\lambda_i=\operatorname{val}(f)$)と書ける。弧 $a$ が $P_i$ に含まれれば $1\ge f(a)\ge\lambda_i\ge1$ なので $\lambda_i=1$ であり、$a$ を含む他の $P_{i'}$ はない(あれば $f(a)\ge2$)。よって $P_1,\dots,P_p$ は互いに弧素で、本数は $p=\sum_i\lambda_i=\operatorname{val}(f)\ge l$ である。したがって $k\ge l$ となり、$k=l$ である。$\square$
無向グラフでは、各辺を互いに逆向きの 2 本の弧に置き換えて同じ議論を行う。2 本の $s$–$t$ 道が辺素であるとは共通の辺をもたないことをいい、内部頂点素であるとは $s,t$ 以外の頂点を共有しないことをいう。
$G=(V,E)$ を有限グラフ、$s,t$ を相異なる頂点とする。
1:要点は、逆向きの 2 本の弧に同時に流れる部分を打ち消せば、弧素な有向道が辺素な道になることである。
辺 $uw$ ごとに弧 $u\to w$ と $w\to u$ を置いた有向グラフ $D$ を作り、すべての容量を $1$ とする。$k$ 本の互いに辺素な道があれば、取り除く辺の集合はそれぞれの道の辺を 1 本ずつ含むので、最小の大きさは $k$ 以上である。逆を示す。整数値の最大流のうち、全弧の値の和が最小のもの $f$ をとる。ある辺 $uw$ で $f(u\to w)=f(w\to u)=1$ なら、両方を $0$ にしても、$u$ と $w$ でそれぞれ入る量と出る量が $1$ ずつ減るだけなので保存則と流量は変わらず、値の和の小さい整数値の最大流が得られて矛盾する。よって、どの辺でも 2 本の弧の一方だけが値 $1$ をとりうる。
thm-nf-menger-arc の証明と同様に、thm-nf-decomposition により $f$ は $\operatorname{val}(f)$ 本の互いに弧素な $s$–$t$ 有向道(とそれ以外の閉路)に分解される。各有向道の向きを忘れると $G$ の $s$–$t$ 道である。2 本が辺 $uw$ を共有すると、弧素なので一方が $u\to w$、他方が $w\to u$ を使い、両方の値が $1$ となって上の性質に反する。よって互いに辺素な道が $\operatorname{val}(f)$ 本ある。
一方、$\operatorname{val}(f)=c(S)$ となるカット $S$ をとると、$\delta^+(S)$ の弧は、$S$ と $V\setminus S$ を結ぶ $G$ の辺と 1 対 1 に対応する(辺 $uw$、$u\in S$、$w\notin S$ には弧 $u\to w$ だけが対応する)。$s$ と $t$ を結ぶ道は必ずこれらの辺のどれかを通るので、これらを取り除けば道はなくなる。よって最小の大きさは $c(S)=\operatorname{val}(f)$ 以下であり、1 が示された。
2:要点は、各頂点を「入口側」と「出口側」の 2 つに分け、その間を 1 本の弧で結ぶと、頂点を共有しないことが弧を共有しないことに言い換えられることである。
$V\setminus\{s,t\}$ の各頂点 $v$ を 2 頂点 $v^-,v^+$ に置き換え、次の弧をもつ有向グラフ $D'$ を作る:各 $v$ について $v^-\to v^+$;$u,w$ がどちらも $s,t$ でない辺 $uw$ について $u^+\to w^-$ と $w^+\to u^-$;辺 $sw$ について $s\to w^-$;辺 $wt$ について $w^+\to t$。$s$ と $t$ は隣接しないので、$s$ と $t$ を直接結ぶ弧はない。
$s$ から出る弧は $w^-$ へ、$w^-$ から出る弧は $w^+$ への 1 本だけ、$w^+$ から出る弧は $x^-$ か $t$ へ向かう。したがって $D'$ の $s$–$t$ 有向道は $s,w_1^-,w_1^+,\dots,w_m^-,w_m^+,t$($m\ge1$)の形をしており、$G$ の $s$–$t$ 道 $(s,w_1,\dots,w_m,t)$ と 1 対 1 に対応する。2 本の $G$ の道が内部頂点 $v$ を共有すれば、対応する $D'$ の道はどちらも弧 $v^-\to v^+$ を通る。逆に $D'$ の 2 本の道が弧を共有すれば、その弧は $v^-\to v^+$、$s\to v^-$、$v^+\to t$、$v^+\to w^-$ のいずれかで、どの場合も $G$ の道は内部頂点 $v$ を共有する。よって、内部頂点素な $s$–$t$ 道の最大本数 $k$ は、$D'$ の弧素な $s$–$t$ 有向道の最大本数に等しい。
thm-nf-menger-arc により、$D'$ には $s$–$t$ 有向道をすべて断つ $k$ 本の弧の集合 $Z$ がある。$Z$ の各弧に $V\setminus\{s,t\}$ の頂点を 1 つ対応させる:$v^-\to v^+$、$s\to v^-$、$v^+\to t$、$v^+\to w^-$ にはどれも $v$ を対応させる。こうして得た頂点の集合 $X$ は $|X|\le k$ を満たす。$G$ の $s$–$t$ 道に対応する $D'$ の道は $Z$ のある弧を通り、その弧に対応させた頂点は $G$ の道の内部頂点なので、$X$ は $s$ と $t$ を結ぶすべての道と交わる。よって最小の大きさは $k$ 以下である。逆に、$s$ と $t$ を結ぶすべての道と交わる $X\subset V\setminus\{s,t\}$ は、$k$ 本の内部頂点素な道の内部頂点を 1 つずつ含み、それらは相異なるので $|X|\ge k$ である。$\square$
2 は 連結度(グラフ) の記事の定理「Mengerの定理(頂点版)」と同じ主張である。弧版・辺版・頂点版は BM76 Theorem 11.4・11.5(p. 204)、Theorem 11.6・11.7(p. 205)にあり、同書も最大流最小カット定理と頂点を分ける構成から導いている。BM76 Corollary 11.7(p. 205)は、これを使って、$k+1$ 頂点以上のグラフが $k$-連結であることと、相異なる任意の 2 頂点が $k$ 本以上の内部頂点素な道で結ばれることが同値であると述べている(この記事では証明しない)。
零フローから始めて、増加道があるかぎりそれに沿って流量を増やす方法は、容量が整数なら有限回で止まる(thm-nf-integrality)。しかし増加道の選び方が悪いと、回数は頂点と弧の個数では抑えられない(ex-nf-bad-choice)。増加道として弧の本数が最小のもの($R_f$ での最短の有向道)を選ぶと、この問題が解消する。
フロー $f$ と頂点 $v$ について、$R_f$ で $s$ から $v$ への有向道の弧の本数の最小値を $d_f(v)$ とする(有向道がなければ $d_f(v)=\infty$)。最短の増加道 $P$ に沿って流量を増やしたとき、$P$ の残余弧のうち残余容量が最小の $\varepsilon$ であったものは、増加の後には $R_f$ から消える。このような残余弧を、その増加での飽和弧とよぶ。
$f$ をフロー、$P$ を $R_f$ の最短の $s$–$t$ 有向道とし、$P$ に沿って流量を増やしたフローを $f'$ とする。このとき、すべての頂点 $v$ について $d_{f'}(v)\ge d_f(v)$ である。
$d_{f'}(v)< d_f(v)$ となる頂点 $v$ があると仮定し、そのうち $d_{f'}(v)$ が最小のものをとる。$d_{f'}(v)$ は有限で、$v\neq s$($d_{f'}(s)=d_f(s)=0$)なので、$R_{f'}$ の最短の $s$–$v$ 有向道の最後の残余弧 $\rho$ を $u$ から $v$ への残余弧とすると、$d_{f'}(u)=d_{f'}(v)-1$ である。$v$ の選び方から $d_f(u)\le d_{f'}(u)$ である。
$\rho$ が $R_f$ にもあれば、$d_f(v)\le d_f(u)+1\le d_{f'}(u)+1=d_{f'}(v)$ となり、仮定に反する。$\rho$ が $R_f$ になければ、$\rho$ は増加によって新しく現れた残余弧である。増加で値が変わるのは $P$ の残余弧に対応する弧だけで、順方向の残余弧 $a^+$ が現れるのは $f(a)$ が減ったとき($P$ が $a^-$ を使ったとき)、逆方向の残余弧 $a^-$ が現れるのは $f(a)$ が増えたとき($P$ が $a^+$ を使ったとき)である。どちらの場合も $P$ は $v$ から $u$ への残余弧を使っており、$P$ は最短なので $d_f(u)=d_f(v)+1$ である。すると $d_f(v)=d_f(u)-1\le d_{f'}(u)-1=d_{f'}(v)-2$ となり、やはり仮定に反する。$\square$
ネットワーク $N=(V,A,s,t,c)$(容量は任意の非負実数)で、零フローから始めて、残余ネットワークに $s$–$t$ 有向道があるかぎり、最短の $s$–$t$ 有向道を選んでそれに沿って流量を増やすことを繰り返す。このとき増加は高々 $|V|\,|A|$ 回で止まり、止まったときのフローは最大流である。
要点:同じ残余弧が 2 度飽和弧になるたびに、その始点の距離 $d(\cdot)$ は 2 以上増える。距離は $|V|$ 未満なので、各残余弧が飽和弧になる回数は $|V|/2$ 以下である。
各弧 $a$ から作られうる残余弧は $a^+$ と $a^-$ の 2 つなので、残余弧の候補は $2|A|$ 個ある。各増加では少なくとも 1 つの残余弧が飽和弧になる。そこで、1 つの候補 $\rho$($x$ から $y$ への残余弧とする)が飽和弧になる回数が $|V|/2$ 以下であることを示せば、増加の回数は $2|A|\cdot|V|/2=|V|\,|A|$ 以下となる。
$\rho$ がフロー $f$ での増加で飽和弧になったとする。$\rho$ は最短の道 $P$ の上にあるので $d_f(y)=d_f(x)+1$ である。増加の後 $\rho$ は消えるので、$\rho$ が次に飽和弧になる前に $\rho$ がもう一度現れなければならず、それには、あるフロー $f'$($f$ より後)での増加の最短の道が、逆向きの残余弧($y$ から $x$ への残余弧)を使う必要がある。そのとき $d_{f'}(x)=d_{f'}(y)+1$ であり、lem-nf-ek-monotone を繰り返し使うと $d_{f'}(y)\ge d_f(y)$ なので、$d_{f'}(x)\ge d_f(y)+1=d_f(x)+2$ である。次に $\rho$ が飽和弧になるときのフロー $f''$ でも、単調性から $d_{f''}(x)\ge d_{f'}(x)\ge d_f(x)+2$ である。
したがって、$\rho$ が飽和弧になるたびに、そのときの $d(x)$ は前回より $2$ 以上大きい。$\rho$ が飽和弧になるとき $x$ は最短の $s$–$t$ 有向道の上にあり $x\neq t$ なので、$0\le d(x)\le|V|-2$ である。$0,2,4,\dots$ のうち $|V|-2$ 以下のものは $|V|/2$ 個以下なので、$\rho$ が飽和弧になる回数は $|V|/2$ 以下である。
止まったとき $R_f$ には $s$–$t$ 有向道がないので、thm-nf-maxflow-mincut により $f$ は最大流である。$\square$
この方法は Edmonds と Karp による改良で、BM76 pp. 199, 202 は、ラベル付けの際に「先にラベルを付けた頂点から先に調べる」ことが最短の増加道を選ぶことにあたり、これで良いアルゴリズムになると述べている。この定理は容量が整数であることを使わないので、最大流の存在の、コンパクト性を使わない別証明にもなっている(thm-nf-maxflow-mincut の (b) ⇒ (a) とあわせる)。各回の最短の道は幅優先探索で求められる。
$m$ を正の整数とする。頂点 $s,p,u,q,r,v,w,t$ と、容量 $m$ の弧 $s\to p$、$p\to u$、$u\to q$、$q\to t$、$s\to r$、$r\to v$、$v\to w$、$w\to t$、および容量 $1$ の弧 $u\to v$ からなるネットワークを考える(BM76 Figure 11.9、p. 202 と同じ形)。カット $\{s\}$ の容量は $2m$ で、道 $s,p,u,q,t$ と $s,r,v,w,t$ に $m$ ずつ流せば流量 $2m$ になるので、最大流の流量は $2m$ である。最短の増加道を選ぶ方法では、最初の 2 回で長さ $4$ のこの 2 本が選ばれ、2 回で終わる。
一方、増加道として長さ $5$ の $s,p,u,v,w,t$($u\to v$ を順方向に使う)と $s,r,v,u,q,t$($u\to v$ を逆方向に使う)を交互に選ぶと、各回の残余容量の最小値は $u\to v$ の $1$ なので、流量は 1 回に $1$ しか増えない。$2k$ 回の後のフローは、$u\to v$ で $0$、他の 8 本の弧で $k$ であり、$k< m$ の間は次の増加道も残余ネットワークにある。よって最大流に達するまでに $2m$ 回かかり、頂点 $8$ 個・弧 $9$ 本のネットワークでも回数はいくらでも大きくなる。
最大流最小カット定理と Menger の定理は、多くの組合せ論の最小最大定理の源である。
| 外す条件・替える条件 | 反例 | 成り立たなくなること |
|---|---|---|
| thm-nf-decomposition の $\operatorname{val}(f)\ge0$ | 弧 $t\to s$ 1 本(容量 $1$)で $f=1$ | $s$–$t$ 有向道と有向閉路の正の係数の和に書けない |
| thm-nf-menger-arc の「弧素」を「内部頂点素」に | 弧 $s\to x$、$x\to t$、$s\to y$、$y\to x$、$x\to z$、$z\to t$ | 内部頂点素な道は 1 本だが、道をすべて断つ弧は 2 本要る |
| thm-nf-menger-undirected の 2 の「$s,t$ が隣接しない」 | 三角形 $K_3$ の 2 頂点 $s,t$ | $s,t$ 以外の頂点をどう除いても道 $(s,t)$ が残る |
| thm-nf-edmonds-karp の「最短の増加道を選ぶ」 | ex-nf-bad-choice のネットワーク | 増加の回数が $\lvert V\rvert\,\lvert A\rvert$ で抑えられない |
1 行目:$s$ から出る弧がないので $\operatorname{val}(f)=0-1=-1$ である。$s$–$t$ 有向道は存在せず、有向閉路もないので、正の係数の和として書けるのは $0$ だけであり、$f\neq0$ と矛盾する。証明では $g(a^*)=\operatorname{val}(f)\ge0$ を使っている。
2 行目:$s$–$t$ 有向道は $s,x,t$、$s,x,z,t$、$s,y,x,t$、$s,y,x,z,t$ の 4 本で、どれも $x$ を通るので、内部頂点素な道は 1 本しかない。一方 $s,x,t$ と $s,y,x,z,t$ は弧素なので弧素な道は 2 本あり、thm-nf-menger-arc により道をすべて断つには弧が 2 本要る(実際、$s\to x$ だけを除くと $s,y,x,t$ が、$x\to t$ だけを除くと $s,x,z,t$ が残る)。
3 行目:$K_3$ の頂点を $s,t,x$ とすると、内部頂点素な $s$–$t$ 道は $(s,t)$ と $(s,x,t)$ の 2 本である。$V\setminus\{s,t\}=\{x\}$ のどの部分集合を除いても辺 $st$ が残るので、すべての道と交わる頂点の集合は存在しない。証明では、$D'$ に $s$ から $t$ への弧がないことを使っている。
4 行目:ex-nf-bad-choice で見たとおり、回数 $2m$ は $m$ を大きくするといくらでも大きくなるが、$|V|\,|A|=72$ は一定である。
Menger の定理(1927 年)はそれより前の結果で、BM76 §11.4(p. 203)はこれを最大流最小カット定理の応用として導いている。容量の代わりに弧ごとに下限も課す問題(BM76 Exercise 11.3.4、p. 203)や、流す費用を最小にする問題も、同じ残余ネットワークの考え方で扱われる。
最大流を求める問題は、弧の値を変数とし、容量制約と保存則を制約とする線形計画問題の特別な場合である(KT17 §13.6、pp. 273–274)。一般の線形計画問題は、係数と定数が整数でも整数の最適解をもつとは限らない(同所)。ネットワークでは容量が整数なら整数値の最大流がある(thm-nf-integrality)ことが、Menger の定理や二部グラフのマッチングへの応用を支えている。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する