最大流問題以及FF演算法

2021-07-28 09:55:12 字數 1280 閱讀 6275

給定指定的乙個有向圖,其中有兩個特殊的點源s(sources)和匯t(sinks),每條邊有指定的容量(capacity),求滿足條件的從s到t的最大流(maxflow).

設 g = (v, e) 是乙個流網路,其容量函式為 c。設 s 為網路的源點,t 為匯點。g 的流的乙個實值函式 f:v×v → r,且滿足下列三個性質:

容量限制(capacity constraint):對所有頂點對 u, v ∈ v,要求 f(u, v) ≤ c(u, v)。

反對稱性(skew symmetry):對所有頂點對 u, v ∈ v,要求 f(u, v) = - f(v, u)。

流守恆性(flow conservation):對所有頂點對 u ∈ v - ,要求 σv∈vf(u, v) = 0。

f(u, v) 稱為從頂點 u 到頂點 v 的流,流的值定義為:|f| =σv∈vf(s, v),即從源點 s 出發的總流。

最大流問題(maximum-flow problem)中,給出源點 s 和匯點 t 的流網路 g,希望找出從 s 到 t 的最大值流。

滿足流網路的性質的實際上定義了問題的限制:

經過邊的流不能超過邊的容量;

除了源點 s 和匯點 t,對於其它所有頂點,流入量與流出量要相等。

上圖最大流為 23,流向如下圖所示

ford-fulkerson 演算法是一種解決最大流的方法,其依賴於三種重要思想:

殘留網路(residual networks)

增廣路徑(augmenting paths)

割(cut)

edmonds-karp演算法 即最短路徑增廣演算法 簡稱ek演算法

ek演算法基於乙個基本的方法:ford-fulkerson方法 即增廣路方法 簡稱ff方法

增廣路方法是很多網路流演算法的基礎 一般都在殘留網路中實現

其思路是每次找出一條從源到匯的能夠增加流的路徑 調整流值和殘留網路 不斷調整直到沒有增廣路為止

ff方法的基礎是增廣路定理(augmenting path theorem):網路達到最大流當且僅當殘留網路中沒有增廣路

ek演算法就是不斷的找最短路 找的方法就是每次找一條邊數最少的增廣 也就是最短路徑增廣.

reference:

最大流問題Ford Fulkerson演算法

最大傳輸量 網路中有兩台計算機s和t,現在想從s傳輸資料到t。該網路中一共有n臺計算機,其中一些計算機之間連有一條單向的通訊電纜,每條通訊電纜都有對應的1秒鐘內所能傳輸的最大資料量。當其他計算機之間沒有資料傳輸時,在1秒鐘內s最多可以傳送多少資料到t?將上述網路當做乙個有向圖。圖中每條邊e都有對應的...

最大流問題 EK演算法

最大流的目的是將最多的物品從源點s通過其他點的中轉,運送到匯點t,每條邊具有能運送物品的上限。從s運送出來的物品數目等於到達t的物品數量。針對圖a,其中每條邊代表運送物品的上上限,圖b是其乙個可行流 a b,a是實際運送物品,b是物品上限 其結果為9,但不是最大流11,這樣的可行流有多個,而最大流就...

最大流演算法

基本的知識,解決什麼問題這些東西就不說啦。演算法導論和很多大神部落格都講解的很詳細。它其實就是不停的找增廣路直到找不到為止。此時通過的所有流量就是最大流量。ford fulkerson 最大流演算法 下面是我的實現。參考了最大流ford fulkerson的演算法實現 include include...