最大流學習筆記(2)

2021-09-07 23:13:00 字數 2049 閱讀 7187

1 基本的ford-fulkerson方法。該方法的思想就是每次找到乙個增廣路$p$,然後將增廣路 $p$對應的流加到之前的流上得到新的流,一直這樣直到找不到增廣路,這時候找到的流就是最大流。

演算法的偽**如下

假設容量是整數,最大流為$f^$,那麼while迴圈最多執行$|f^|$次,因為每次至少使得流量增加1,每次找增光路的代價是$o(e)$,所以總的複雜度是$o(e|f^|)$

2 edmonds-karp演算法。edmonds-karp演算法是對ford-fulkerson的改進,具體就是每次找增廣路時找的是s到t的最短路(路徑邊長為1)。設$\delta_(u,v)$表示殘存網路中從$u$到$v$的最短路徑

3 如果edmonds-karp演算法執行在流網路g上,那麼對所有的節點$v\in v-\$,殘存網路$g_$中的最短路徑距離$\delta_(s,v)$隨著每次流量的遞增而單調遞增。

4 如果edmonds-karp演算法執行在流網路g上,則該演算法所執行的流量遞增的總次數為$o(ve)$

5 edmonds-karp演算法每次找最短路徑的複雜度是$o(e)$,所以總的複雜度是$o(ve^)$

以下為證明

3的證明

假設對於某個節點$v\in v-\$,存在乙個流量遞增的操作使得源點到$v$的距離變小了。設$f$是最短路徑減少之前的流量,對應的殘存網路為$g_$,$f^$是遞增之後的流量,對應的殘存網路為$g_}$,設$v$為在所有最短距離減少的節點中,$\delta_}(s,v)$最小的節點。有$\delta_}(s,v)

設$p=s\sim u\rightarrow v$為殘存網路$g_}$中從源節點s到$v$的一條最短路徑,因此$(u,v)\in g_}$,並且$\delta_}(s,u)=\delta_}(s,v)-1$

源節點到$u$的距離沒有減少,所以$\delta_}(s,u)\geq \delta_(s,u)$

那麼一定有$(u,v)\notin e_$,否則:

$\delta_(s,v)\leq \delta_(s,u)+1$

$\leq \delta_}(s,u)+1$

$=\delta_}(s,v)$

這與$\delta_}(s,v)

那麼現在$(u,v)\notin e_$但是$(u,v)\in e_}$,這一遞增操作一定是增加了$v$到$u$的流量。又因為edmonds-karp演算法總是沿著最短路徑增加流,所以在$g_$中從s到$u$的最短路徑上的最後一條邊是$(v,u)$,所以

$\delta_(s,v)=\delta_(s,u)-1$

$\leq \delta_}(s,u)-1$

$=\delta_}(s,v)-2$

這與$\delta_}(s,v)

4的證明

在$g_$中,如果一條路徑$p$的殘存容量是該路徑上的邊$(u,v)$的殘存容量,即$c_(p)=c_(u,v)$,那麼我們稱$(u,v)$為關鍵邊。下面首先證明對於每條邊來說,成為關建邊的次數最多為$\frac$

當$(u,v)$第一次成為關鍵邊時有$\delta_(s,v)=\delta_(s,u)+1$

之後邊$(u,v)$將從殘存網路中消失。到下一次$(u,v)$成為關鍵邊時,一定在之前$(v,u)$出現在了路徑$p$上,假設這一事件發生時$f^$是g的流,那麼有

$\delta_}(s,u)=\delta_}(s,v)+1$

由於$\delta_(s,v)\leq \delta_}(s,v)$

那麼有$\delta_}(s,u)=\delta_}(s,v)+1\geq \delta_(s,v)+1=\delta_(s,u)+2$,也就是到$u$的距離增加了至少2

初始時到$u$的距離至少為0,最後到$u$的距離最多為$|v|-2$($(u,v)$出現在增廣路徑上意味著$u\neq t$,同時$u\neq s$).所以在$(u,v)$第一次成為關建邊後還最多能成為$\frac=\frac-1$次關建邊,所以一共最多成為$\frac$次關建邊。

一共有$|e|$條邊,所以一共有最多$\frac$條關建邊,每條增廣路至少出現一條關建邊,所以總次數為$o(ve)$

最大流學習筆記(2)

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

最大流 學習筆記

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

最大流學習筆記(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...