最大流學習筆記(4) 推送重貼標籤演算法二

2021-09-08 14:25:49 字數 2172 閱讀 9375

14 設$f$是流網路g的乙個預流,那麼對於任意乙個溢位節點$x$,在$g_$中存在一條從$x$到源點$s$的簡單路徑。

15 在generic-push-relabel的整個過程中,任何乙個$u\in v$,$u.h\leq 2|v|-1$

16  在generic-push-relabel的整個過程中,每個節點被重貼標籤次數最多為$2|v|-1$,所有重貼標籤次數不會超過$(2|v|-1)(|v|-2)<2|v|^$.由15可知,$s,t$不會被重貼標籤,所以只有$|v|-2$個節點會被重貼標籤,每個節點的高度最大為$2|v|-1$,而每次重貼標籤至少使得高度增加1,所以每個節點最多執行$2|v|-1$ 次重貼標籤操作,所以總的重貼標籤操作次數不超過$(2|v|-1)(|v|-2)$ 

17 在generic-push-relabel的整個過程中,飽和推送的次數少於$2|v||e|$ 

18 在generic-push-relabel的整個過程中,非飽和推送的次數少於$4|v|^(|v|+|e|)$ 

19  由16,17,18可知,generic-push-relabel演算法的複雜度為$o(v^e)$

以下是證明

14的證明

對於溢位節點$x$,設$u=\中存在從x到v的簡單路徑\}$,$\overline=v-u$,現在假設$s\notin u$,也就是說$s\in \overline$

$0<\sum_e(u)=\sum_(\sum_f(v,u)-\sum_f(v,u))$

$=\sum_((\sum_f(v,u)+\sum_}f(v,u))-(\sum_f(u,v)+\sum_}f(u,v)))$

$=\sum_\sum_f(v,u)+\sum_\sum_}f(v,u)-\sum_\sum_f(u,v)-\sum_\sum_}f(u,v)$

$=\sum_\sum_}f(v,u)-\sum_\sum_}f(u,v)$

也就是說$\sum_\sum_}f(v,u)-\sum_\sum_}f(u,v)>0$,由於$\sum_\sum_}f(u,v)\geq 0$,所以$\sum_\sum_}f(v,u)>0$,因此至少存在乙個$u^\in u,v^\in \overline$滿足$f(v^,u^)>0$,那麼就有一條殘存邊$(u^,v^)$,也就是說$x$到$v^$存在路徑。與開始的假設矛盾。

15的證明

首先,源點和匯點從來不會溢位,所以它們的高度不會改變。它們一開始的高度都不比$2|v|-1$大。

對於任意節點$u\in v-\$,初始時高度都是0.且僅當每次被重貼標籤時,高度才會被改變。這時,根據14,存在從$u$到源點的簡單路徑$p=$,$k\leq |v|-1$,$v_=u,v_=s$,由於$v_$ 比$v_$的高度最多大1,所以$v_$的高度比$v_$最多大$k$,所以$u.h=v_.h\leq k+|v|\leq 2|v|-1$

17的證明

對於任意一條邊$(u,v)$,假設從$u$到$v$進行了一次飽和推送,那麼此時$v.h=u.h-1$,那麼下一次的飽和推送如果發生,一定是$v$到$u$,此時$v.h=u.h+1$,由於在這中間$u.h$不會減小,所以第二次飽和推送發生時,$v.h$的高度至少增加2.而$v.h\leq 2|v|-1$,所以對於$v$到$u$的飽和推送次數小於$|v|$,同理$u$到$v$的飽和推送次數也是小於$|v|$,所以一條邊上進行的飽和推送小於$2|v|$,所以總的飽和推送次數小於$2|v||e|$

18的證明

定義乙個函式$\phi =\sum_v.h$。初始時$\phi=0$.$\phi$的值在每次重貼標籤、飽和推送、非飽和推送之後都可能發生改變。

(1)重貼標籤:對於乙個節點$u$,其所有的重貼標籤操作可以導致$\phi$增大的值小於$2|v|$,因為節點$u$的高度最大為$2|v|-1$

(2)飽和推送:每次飽和推送作用於$u$到$v$後,$v$可能溢位,這時$v$的溢位可導致$\phi$增加的值小於$2|v|$,因為節點$v$的高度最大為$2|v|-1$

(3)非飽和推送:每次飽和推送作用於$u$到$v$後,$u$不再溢位,較少了$u.h$,而$v$可能溢位也可能不溢位($v$是源點的時候就不會溢位),即使$v$溢位,可使得$\phi$增加$v.h$,由於$u.h-v.h=1$,所以每次非飽和推送至少使得$\phi$減少1.

$\phi$總的增加小於$(2|v|)(2|v|^)+(2|v|)(2|v||e|)=4|v|^(|v|+|e|)$,而非飽和推送導致的$\phi$的減少也不會超過$\phi$的增加,所以非飽和操作的次數小於$4|v|^(|v|+|e|)$

最大流 學習筆記

這裡總結一下幾種最大流演算法 ek演算法應該是最大流中最簡單的了,但剛開始理解也花了不少工夫 ek演算法基於增廣路。它的思想是,每一次通過bfs不停尋找增廣路,找到以後增廣,直到找不到為止 殘量 一條邊的殘量等於該邊的容量減去該邊當前的流量,為了方便,我們可以建立殘量網路。這樣每條邊只需要對應乙個權...

最大流學習筆記(2)

1 基本的ford fulkerson方法。該方法的思想就是每次找到乙個增廣路 p 然後將增廣路 p 對應的流加到之前的流上得到新的流,一直這樣直到找不到增廣路,這時候找到的流就是最大流。演算法的偽 如下 假設容量是整數,最大流為 f 那麼while迴圈最多執行 f 次,因為每次至少使得流量增加1,...

最大流學習筆記(1)

1流網路。流網路g v,e 是乙個有向圖,每條邊 u,v in e 有乙個非負容量值 c u,v geq 0 如果 u,v notin e,c u,v 0 另外有乙個源節點s和匯點t。2流。g中的流是乙個實值函式 f v times v rightarrow r 滿足 1 容量限制 對所有的 u,v...