9.3. フローの基礎的な性質

目次

最大フロー問題に取り掛かる前に、フローに関する簡単な観察を証明しよう:

命題 9.3.1

多重有向グラフ \(D=\left( V,A,\psi\right) \)、入口 \(s \in V\)、出口 \(t \in V\)、容量関数 \(c\colon A\rightarrow\mathbb{N}\) から構成されるネットワークを \(N\) とする。\(N\) 上のフローを \(f\colon A\rightarrow\mathbb{N}\) とする。このとき次の等式が成り立つ:

\[ \begin{aligned} \left\vert f\right\vert & =f^{+}\left( s\right) -f^{-}\left( s\right) \\ & =f^{-}\left( t\right) -f^{+}\left( t\right) \end{aligned} \]

[証明] 次の等式が成り立つ:

\[ \begin{aligned} \sum\limits_{v\in V}f^{+}\left( v\right) & =\underbrace{\sum\limits_{v\in V}\ \ \sum_{\substack{a\in A;\\[2pt] a \text{ の始点は } v}}}_{=\sum\limits_{a\in A}} f\left( a\right) \qquad \left(\because\ f^{+}\left(x\right) \text{ の定義} \right) \\ & =\sum_{a\in A}f\left( a\right) \end{aligned} \]

[この等式は有名な性質 \(\sum \limits_{v\in V}\deg^{+}v=\left\vert A\right\vert \) の一般化と言える。] 同様に \(\sum\limits_{v\in V}f^{-}\left( v\right) =\sum\limits_{a\in A}f\left( a\right) \) も成り立つ。ここから次の等式を得る:

\[ \sum\limits_{v\in V}\left( f^{-}\left( v\right) -f^{+}\left( v\right) \right) =\underbrace{\sum\limits_{v\in V}f^{-}\left( v\right) }_{=\sum\limits_{a\in A}f\left( a\right) }-\underbrace{\sum_{v\in V}f^{+}\left( v\right) }_{=\sum\limits_{a\in A}f\left( a\right) }=0 \qquad (1) \]

一方で、フローの保存制約からは任意の \(v\in V\setminus\left\{ s,t\right\} \) に対して \(f^{-}\left( v\right) =f^{+}\left( v\right) \) が成り立つと分かる。言い換えれば \(f^{-}\left( v\right) -f^{+}\left( v\right) =0\) だから、和 \(\sum\limits_{v\in V}\left( f^{-}\left( v\right) -f^{+}\left( v\right) \right) \) で足されている項は \(v=s\) と \(v=t\) に対応する項を除いて全て \(0\) だと分かる。よって、この和はその二つの項の和に等しい:

\[ \sum\limits_{v\in V}\left( f^{-}\left( v\right) -f^{+}\left( v\right)\right) =\left( f^{-}\left( s\right) -f^{+}\left( s\right) \right)+\left( f^{-}\left( t\right) -f^{+}\left( t\right) \right) \]

これと式 \((1)\) より次の等式を得る:

\[ \left( f^{-}\left( s\right) -f^{+}\left( s\right) \right) +\left(f^{-}\left( t\right) -f^{+}\left( t\right) \right) =0 \]

よって \(\left\vert f\right\vert \) の定義より次の等式が分かる:

\[ f^{-}\left( t\right) -f^{+}\left( t\right) =-\left( f^{-}\left( s\right) -f^{+}\left( s\right) \right) =f^{+}\left( s\right) -f^{-}\left( s\right) =\left\vert f\right\vert \]

以上で命題 9.3.1 は証明された。□

命題 9.3.2

多重有向グラフ \(D=\left( V,A,\psi\right) \)、入口 \(s \in V\)、出口 \(t \in V\)、容量関数 \(c\colon A\rightarrow\mathbb{N}\) から構成されるネットワークを \(N\) とする。\(f\colon A\rightarrow\mathbb{N}\) を \(N\) 上のフロー、\(S\) を \(V\) の部分集合とする。このとき:

  1. 次の等式が成り立つ:

    \[ f\left( S,\overline{S}\right) -f\left( \overline{S},S\right) =\sum_{v\in S}\left( f^{+}\left( v\right) -f^{-}\left( v\right) \right) \]

    [定義 9.1.5 で定めたように、\(f\left( P,Q\right) \) は \(\sum\limits_{a\in\left[ P,Q\right] }f\left( a\right) \) を意味する。]

  2. \(s\in S\) かつ \(t\notin S\) なら、次の等式が成り立つ:

    \[ \left\vert f\right\vert =f\left( S,\overline{S}\right) -f\left(\overline{S},S\right) \]
  3. \(s\in S\) かつ \(t\notin S\) なら、次の不等式が成り立つ:

    \[ \left\vert f\right\vert \leq c\left( S,\overline{S}\right) \]
  4. \(s\in S\) かつ \(t\notin S\) なら、\(\left\vert f\right\vert =c\left( S,\overline{S}\right) \) が成り立つのは次の二つの条件が満たされるとき、かつそのときに限る:

    \[ \begin{aligned} \text{1. 任意の } & a\in\left[ \overline {S},S\right] \text{ に対して } f\left( a\right) =0 \\ \text{2. 任意の } & a\in\left[S,\overline{S}\right] \text{ に対して } f\left( a\right) = c\left( a\right) \end{aligned} \]

[証明] 最初に、以前に言及した「送金スキーム用のネットワーク」の例を使って示すべき命題を言い換えるとどうなるかを示す。\(S\) を特定の国にある銀行口座全体の集合と考えると、\(f\left( S,\overline{S}\right) \) は送金処理における国 \(S\) の「輸出額」 (\(S\) から出ていく資金) であり、\(f\left( \overline{S},S\right) \) は送金処理における国 \(S\) の「輸入額」(\(S\) に入ってくる資金) である。命題 9.3.2 (a) は、\(S\) の「純輸出額」 (\(S\) の輸出から \(S\) の輸入を引いた額) が \(S\) 国内の銀行の出流量から入流量を引いた値の和に等しいと主張する。これは直感的にも明らかだろう (特に、純輸出額の計算において \(S\) 国内の銀行口座間の資金移動は打ち消されて \(0\) になる)。(b) は、\(S\) が入口 \(s\) を含み出口 \(t\) を含まない (資金の移動元が国内にあり、移動先が国外にある) とき、移動する資金の総額は \(S\) の純輸出額に等しいと主張する。(c) は、同様の仮定の下で、移動する資金の総額は \(S\) の「輸出能力」\(c\left( S,\overline {S}\right) \) (「輸出弧」 \(a\in\left[ S,\overline{S}\right] \) の容量の和) 以下だと主張する。(d) は、この不等式で等号が成り立つ (移動する資金の総額が \(S\) の輸出能力に等しい) とき、「輸入弧」\(a\in\left[ \overline{S},S\right] \) は使われておらず (\(S\) に輸入される資金は存在せず)、「輸出弧」 \(a\in\left[ S,\overline{S}\right] \) は容量の限界まで使われていると主張する。

これで命題 9.3.2 の主張が納得できたことを願う。ただ、証明しないまま次に進むのは気持ちが良くないので、以下に数学的に厳密な証明を示す (和の変形はこれまでに十分経験してきたと思うので、他の証明よりは簡潔にしてある)。

(a): 次の変形から従う:

\[ \begin{aligned} \sum_{v\in S}\left( f^{+}\left( v\right) -f^{-}\left( v\right) \right) & =\underbrace{\sum_{v\in S}f^{+}\left( v\right) }_{\substack{=f\left( S,V\right) \\[2pt]\text{[なぜ?]}}}-\underbrace{\sum_{v\in S}f^{-}\left( v\right) }_{\substack{=f\left( V,S\right) \\[2pt]\text{[なぜ?]}}}\\ & =\underbrace{f\left( S,V\right) }_{\substack{=\,f\left( S,S\right) +f\left( S,\overline{S}\right) \\[2pt] (\because\ V \text{ は共通要素を持たない}\\ \text{二つの集合 } S,\, \overline{S} \text{ の和集合})} }-\underbrace{f\left( V,S\right) }_{\substack{=\,f\left( S,S\right) +f\left( \overline{S},S\right) \\[2pt](\because\ V \text{ は共通要素を持たない}\\ \text{二つの集合 } S,\, \overline{S} \text{ の和集合})}}\\ & =f\left( S,S\right) +f\left( S,\overline{S}\right) -\left( f\left( S,S\right) +f\left( \overline{S},S\right) \right) \\ & = f\left( S,\overline {S}\right) -f\left( \overline{S},S\right) \end{aligned} \]

(b): \(t \notin S\) より \(S\setminus\left\{ s\right\} \subseteq V\setminus \left\{ s,t\right\} \) が成り立つので、(a) より次を得る:

\[ \begin{aligned} & f\left( S,\overline{S}\right) -f\left( \overline{S},S\right) \\ & \quad =\sum_{v\in S}\left( f^{+}\left( v\right) -f^{-}\left( v\right) \right) \\ & \quad =\underbrace{\left( f^{+}\left( s\right) -f^{-}\left( s\right) \right) }_{\substack{=\left\vert f\right\vert \\[2pt](\because\ \left\vert f\right\vert \text{ の定義})}}+\sum_{v\in S\setminus\left\{ s\right\} }\underbrace{\left( f^{+}\left( v\right) -f^{-}\left( v\right) \right) }_{\substack{=0\\[2pt](\because\ \text{フローの保存制約と} \\[2pt] v\in S\setminus\left\{ s\right\} \subseteq V\setminus\left\{ s,t\right\} )}}\ \ \ \ \ \ \ \ \ \ \left(\because\ s\in S\right) \\ & \quad =\left\vert f\right\vert \end{aligned} \]

以上で (b) は証明された。

(c): フローの容量制約より任意の弧 \(a\in A\) に対して \(f\left( a\right) \leq c\left( a\right) \) が成り立つ。この不等式を全ての \(a\in\left[ S,\overline{S}\right] \) にわたって足し上げると \(f\left( S,\overline {S}\right) \leq c\left( S,\overline{S}\right) \) を得る。フローの容量制約からは \(f\left( a\right) \geq0\) も分かる。この不等式を全ての \(a\in\left[ \overline{S},S\right] \) にわたって足し上げると \(f\left( \overline{S},S\right) \geq0\) を得る。よって (b) から次の等式が分かる:

\[ \left\vert f\right\vert =\underbrace{f\left( S,\overline{S}\right) }_{\leq c\left( S,\overline{S}\right) }-\underbrace{f\left( \overline{S},S\right) }_{\geq0}\leq c\left( S,\overline{S}\right) \]

以上で (c) は証明された。

(d): (c) で等号が成り立つケースを考える必要がある。ただ、(c) の証明を思い出してほしい: 不等式 \(\left\vert f\right\vert \leq c\left( S,\overline{S}\right) \) は、全ての弧 \(a\in\left[ S,\overline{S}\right] \) にわたって不等式 \(f\left( a\right) \leq c\left( a\right) \) を足し上げることで得られていた。よって不等式 \(\left\vert f\right\vert \leq c\left( S,\overline{S}\right) \) における等号の成立は、この不等式に関係する全ての不等式 ── 全ての弧 \(a\in\left[ S,\overline{S}\right] \) に対する \(f\left( a\right) \leq c\left( a\right) \) と、全ての弧 \(a\in\left[ \overline{S},S\right] \) に対する \(f\left( a\right) \geq0\) ── における等号の成立と同値である。言い換えれば、次の二つの条件を満たすことが等号成立のための必要十分条件である:

\[ \begin{aligned} \text{任意の } & a\in\left[ \overline {S},S\right] \text{ に対して } f\left( a\right) =0 \\ \text{任意の } & a\in\left[S,\overline{S}\right] \text{ に対して } f\left( a\right) = c\left( a\right) \end{aligned} \]

以上で (d) は証明された。□

広告