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...