最大網路流

2021-08-30 07:51:08 字數 2117 閱讀 7092

1 基本概念和術語

( 1 ) 網路

g 是乙個簡單有向圖, g=(v,e) , v= 。在 v 中指定乙個頂點 s ,稱為源 和另乙個頂點 t ,稱為匯 。有向圖 g 的每一條邊 (v,w) ∈ e ,對應有乙個值 cap(v,w)≥0 ,稱為邊的容量 。這樣的有向圖 g 稱作乙個網路 。

( 2 ) 網路流

網路上的流 是定義在網路的邊集合 e 上的乙個非負函式 flow= ,並稱 flow(v,w) 為邊 (v,w) 上的流量 。

( 3 ) 可行流

滿足下述條件的流 flow 稱為可行流 :

① 容量約束 : 對每一條邊 (v,w) ∈ e , 0≤flow(v,w)≤cap(v,w) 。

② 平衡約束 :

對於中間頂點:流出量 = 流入量。

即對每個 v ∈ v(v≠s,t) 有:頂點 v 的流出量-頂點 v 的流入量 =0 ,即

對於源 s : s 的流出量- s 的流入量 = 源的淨輸出量 f ,即

對於匯 t : t 的流入量- t 的流出量的 = 匯的淨輸入量 f ,即

式中 f 稱為這個可行流的流量,即源的淨輸出量 ( 或匯的淨輸入量 ) 。可行流總是存在的。

例如,讓所有邊的流量 flow(v,w)=0 ,就得到乙個其流量 f=0 的可行流 ( 稱為 0 流 ) 。

( 4 ) 邊流

對於網路 g 的乙個給定的可行流 flow ,將網路中滿足 flow(v,w)=cap(v,w) 的邊稱為飽和邊 ; flow(v,w)0 的邊稱為非零流邊 。當邊 (v,w) 既不是一條零流邊也不是一條飽和邊時,稱為弱流邊 。

( 5 ) 最大流

最大流問題即求網路 g 的乙個可行流 flow ,使其流量 f 達到最大。即 flow 滿足:0≤flow(v,w)≤cap(v,w) , (v,w) ∈ e ;且

( 6 ) 流的費用

實際應用中,與網路流有關的問題,不僅涉及流量,而且還有費用的因素。此時網路的每一條邊 (v,w) 除了給定容量 cap(v,w) 外,還定義了乙個單位流量費用 cost(v,w) 。對於網路中乙個給定的流 flow ,其費用定義為:

( 7 ) 殘流網路

對於給定的乙個流網路 g 及其上的乙個流 flow ,網路 g 關於流 flow 的殘流網路 g* 與 g 有相同的頂點集 v ,而網路 g 中的每一條邊對應於 g* 中的 1 條邊或 2 條邊。

設 (v,w) 是 g 的一條邊。

當 flow(v,w)>0 時,( w,v )是 g* 中的一條邊,該邊的容量為 cap*(w,v)=flow(v,w) ;

當 flow(v,w)增廣路演算法

1 演算法基本思想

設p是網路g中聯結源s和匯t的一條路。定義路的方向是從s到t。將路p上的邊分成2類:一類邊的方向與路的方向一致,稱為向前邊 。向前邊的全體記為p+。另一類邊的方向與路的方向相反,稱為向後邊 。向後邊的全體記為p-。

設flow是乙個可行流,p是從s到t的一條路,若p滿足下列條件:

(1)在p的所有向前邊(v,w)上,flow(v,w)0,即p-中的每一條邊都是非零流邊。

則稱p為關於可行流flow的一條可增廣路 。

可增廣路是殘流網路中一條容量大於0的路。

將具有上述特徵的路p稱為可增廣路是因為可以通過修正路p上所有邊流量flow(v,w)將當前可行流改進成乙個流值更大的可行流。

增流的具體做法是:

(1)不屬於可增廣路p的邊(v,w)上的流量保持不變;

(2)可增廣路p上的所有邊(v,w)上的流量按下述規則變化:

· 在向前邊(v,w)上,flow(v,w)+d;

· 在向後邊(v,w)上,flow(v,w)-d。

按下面的公式修改當前的流。

其中d稱為可增廣量,可按下述原則確定:d取得盡量大,又要使變化後的流仍為可行流。按照這個原則,d既不能超過每條向前邊(v,w)的cap(v,w)-flow(v,w),也不能超過每條向後邊(v,w)的flow(v,w)。因此d應該等於向前邊上的cap(v,w)-flow(v,w)與向後邊上的flow(v,w)的最小值。也就是殘流網路中p的最大容量。

增廣路定理 :設flow是網路g的乙個可行流,如果不存在從s到t關於flow的可增廣路p,則flow是g的乙個最大流。

動畫演示一:

動畫演示二:

最大網路流

求網路流有很多演算法,這幾天學習了兩種,記錄一下ek演算法。首先是網路流中的一些定義 v表示整個圖中的所有結點的集合.e表示整個圖中所有邊的集合.g v,e 表示整個圖.s表示網路的源點,t表示網路的匯點.對於每條邊 u,v 有乙個容量c u,v c u,v 0 如果c u,v 0,則表示 u,v ...

最大網路流

圖中有兩個點源結點s和匯點t。源結點是網路流的起點,匯點是流的終點 給定乙個流網路g 乙個源結點s 乙個匯點t,找到值最大的乙個流 定義 出發點為源點,接受流量 的匯聚點為匯點,邊上的權值為可以流過的最大值 殘存網路gf 由仍可以對流量進行增加 減少的邊構成 流過的量不超過容量的邊 包含原圖中的邊,...

最大網路流問題

參考博文 之前參加阿里巴巴的筆試碰到一最大網路流的題目。因為之前沒有看過這類演算法,所以還是自然沒做出。今天抽空看了看。了解了下基本概念和求解流程。這裡簡單總結下。本圖示最大流的乙個例項。由此,可以引出最大流的一些基本的定義和概念 可以這樣看,圖就是一種管道,管道有最大通過流量的限制,圖中邊的權值就...