0.1. 目的

sourceとsinkが複数ある場合でもフロー分解が成立することを証明する.

0.2. 定義

source集合を,sink集合をとする.
今後考えるグラフはsource->sourceもしくはsink->sinkを繋ぐ有効枝は存在しないとする.つまり,

またフローが与えられたとき, 任意の頂点に対して,正味の流出量を以下のように定める. また,フローのフロー値を以下で定める.
さらにフローが以下の条件を満たすとき,-フローと呼ぶ.

0.2.1. 補題2.1 フロー分解のためのcutに関する補題

頂点集合の部分集合に対してからの流出量への流入量を以下のように定める.

かつを満たす頂点集合の分割-カットと呼び,-カットの容量 と定義する.
このとき以下が成立

を任意の-フローとし,(,)を任意の-カットとする.
このとき

(Proof)

0.2.2. 補題2.1 フロー分解

> をネットワーク 上の(-)フローとする.
このときは流量が正であるsourceからsinkへの有限個のパスと流量が正である有限個の閉路に分解することができる.
さらに閉路の個数は最大で|E|個で,パスと閉路の個数の総和は最大でになるようにできる.

(Proof)
となるが存在する限り以下の操作(操作1)を繰り返す.
(この操作が有限回で終了することは最後に示す)
よりかつを満たすアークが存在する.であるならsinkに到達する流量が正のパスが得られたことになる.そうでない場合はフロー保存則(の場合)もしくは(の場合)という仮定からかつを満たすアークが存在する.この議論を繰り返し行うことで,頂点が有限個であることから
(1) sinkに到達するパスが得られる(終点をとおく)
(2) 1度訪れたノードに到達するパスが得られる
かのいずれかが起こる.
(1)の場合
とし,フローからパスに流量を流したフローを除く操作を行う.すなわち,新しいフローをとすると (注意)
でなくとすることにより新しいフローも(-)フローとなっていることに注意する.

(2)の場合
流量が正の閉路が得られるので,と定義し,フローから閉路に流量を流したフローを除く操作を行う.すなわち

次に上記の操作1が終了した後の操作(操作2という)について述べる.
初めに操作1が終了した時点で全ての頂点に対してとなっていることを示す.
ならば,操作1とフロー保存則よりであるので,である場合について考える.
上記のcutに関する補題より, であり, かつ-フローの条件よりであるので,となる.
続いて操作2について述べる.
となるアークが存在する限り以下の操作(操作2)を繰り返す.
全ての頂点においてフロー保存則が成立していることを考慮すると,操作1と同じ議論から流量が正の閉路が得られるので,とおきフローから閉路に流量を流したフローを引く.

操作2が終了した時点で全てのアークの流量は0となるので,フローを分解出来たことになる.
最後に操作1と操作2は有限回で終わることを証明する.
操作1,2のいずれかの操作を1回行うことによって次の3つのうちいずれかが起こる.
(a)少なくとも1つのアークの流量が0となる.(となるとき)
(b)少なくとも1つのについてとなる. ( or となるとき.)
操作1と操作2のいずれかの1回の操作によって,流量が正である-パスもしくは閉路が得られるのでパスと閉路の個数の総和は最大でとなるようにできる.また1回の操作によって,閉路が除かれる場合は(a)の場合のであるので,閉路の個数は最大で個となるように分解できる.
(補足)

操作1が終わった段階でとなるアークが存在した場合を通る流量が正の閉路が存在する.

(Proof)
上記の証明よりとなるアークが存在した場合には流量が正の閉路が存在するがその閉路がを含む場合は証明終了.含まない場合はフローを更新した後もとなるので同様の操作を繰り返すことができる.もし,この操作を何回繰り返してもを含む閉路が得られないとするとこの操作は有限回で終了しないことになり矛盾.

Last modified by akirat1993 2019-05-26 02:56:51
Created by akirat1993 2019-05-26 02:56:51

results matching ""

    No results matching ""