1. 程式人生 > >$Edmonds-Karp$[網絡流]

$Edmonds-Karp$[網絡流]

line 能夠 水管 同時 自來水 都是 karp 當前 但是

最大流最小割定理$(Maximum Flow, Minimum Cut Theorem): $

網絡的最大流等於最小割

具體的證明分三部分
1.任意一個流都小於等於任意一個割 這個很好理解 自來水公司隨便給你家通點水 構成一個流 恐怖分子隨便砍幾刀 砍出一個割 由於容量限制 每一根的被砍的水管子流出的水流量都小於管子的容量 每一根被砍的水管的水本來都要到你家的 現在流到外面 加起來得到的流量還是等於原來的流
管子的容量加起來就是割 所以流小於等於割 由於上面的流和割都是任意構造的 所以任意一個流小於任意一個割
2.構造出一個流等於一個割 當達到最大流時 根據增廣路定理 殘留網絡中s到t已經沒有通路了 否則還能繼續增廣 我們把s能到的的點集設為S 不能到的點集為T 構造出一個割集C[S,T] S到T的邊必然滿流 否則就能繼續增廣 這些滿流邊的流量和就是當前的流即最大流

把這些滿流邊作為割 就構造出了一個和最大流相等的割
3.最大流等於最小割 設相等的流和割分別為Fm和Cm 則因為任意一個流小於等於任意一個割 任意F≤Fm=Cm≤任意C 定理說明完成,證明如下: 對於一個網絡流圖G=(V,E),其中有源點s和匯點t,那麽下面三個條件是等價的:

  1. 流f是圖G的最大流
  2. 殘留網絡Gf不存在增廣路
  3. 對於G的某一個割(S,T),此時f = C(S,T) 首先證明1 => 2:

我們利用反證法,假設流f是圖G的最大流,但是殘留網絡中還存在有增廣路p,其流量為fp。則我們有流f’=f+fp>f。這與f是最大流產生矛盾。
接著證明2 => 3:

假設殘留網絡Gf不存在增廣路,所以在殘留網絡Gf中不存在路徑從s到達t。我們定義S集合為:當前殘留網絡中s能夠到達的點。同時定義T=V-S。

此時(S,T)構成一個割(S,T)。且對於任意的u∈S,v∈T,有f(u,v)=c(u,v)。若f(u,v) < c(u,v),則有Gf(u,v) > 0,s可以到達v,與v屬於T矛盾。
因此有f(S,T)=Σf(u,v)=Σc(u,v)=C(S,T)。 最後證明3 => 1:

由於f的上界為最小割,當f到達割的容量時,顯然就已經到達最大值,因此f為最大流。 這樣就說明了為什麽找不到增廣路時,所求得的一定是最大流。
源點:只有流出去的點
匯點:只有流進來的點
流量:一條邊上流過的流量
容量:一條邊上可供流過的最大流量
殘量:一條邊上的容量-流量
EK時間復雜度:\(O(n m^2)\)

$Edmonds-Karp$[網絡流]