網路流基本概念

2022-03-29 21:27:44 字數 3821 閱讀 9214

網路流是圖論中乙個博大精深的分支。其最主要的難點在於各種模型的建立,我們需要熟練掌握其中的演算法模板並且充分理解其原理,積累建圖經驗,才能在遇到網路流的題目時從容應對。

本篇blog主要介紹網路流的基本概念,弄清楚這些概念、定理及理解其證明,對於後面的學習會頗有助益。

乙個流網路g=(v,e)是一張有向圖,圖中每條有向邊(x,y)∈e都有乙個給定的權值c(x,y),稱為邊的容量。特殊地,若(x,y)不屬於e,則c(x,y)=0。圖中還有兩個特殊的點s,t∈v(s≠t),稱為源點匯點

定義網路的流函式f:對於(x,y)∈e,f(x,y)稱為邊的流量

對於任意乙個可行流,需要滿足兩個條件:

容量限制:0<=f(x,y)<=c(x,y);

流量守恆:除源點和匯點外,對於圖中任意乙個點,流入該點的流量之和等於從該點流出的流量之和;形式化地來看,即對於任意x∈v(x≠s,t),∑f(y,x)=∑f(x,y),其中(x,y),(y,x)∈e。

整個網路的流量值|f|=∑f(s,v)-∑f(v,s),其中(s,v),(v,s)∈e。

最大流即最大可行流,指流網路的所有可行流中流量最大者。

對於原網路的任意乙個可行流,存在唯一殘留網路與之對應。

我們用gf表示殘留網路,gf=(v,e'),其中e'包含e中所有邊及e中所有邊的反向邊。

殘留網路中邊的容量記為c'(x,y)。若(x,y)∈e,即(x,y)為原網路的邊,則c'(x,y)=c(x,y)-f(x,y),其中c(x,y)-f(x,y)被稱為邊(x,y)的剩餘容量;若(x,y)不屬於e,且(y,x)∈e,即(x,y)為原網路中某條邊的反向邊,則c'(x,y)=f(y,x)。

記f'為殘留網路的流。若f為流網路的乙個可行流,f'為該可行流對應的殘留網路的可行流,則f+f'也是原網路的乙個可行流,且|f+f'|=|f|+|f'|。

證明:

要證f+f'是原網路乙個可行流,只需考慮可行流需要滿足的兩個條件。

①容量限制:

新可行流中的邊有兩種情況,一種是由原可行流與殘留網路中的可行流同向的邊累加,一種是原可行流與殘留網路中的可行流反向的邊相減(前者減後者)。

(i) (x,y)∈e,f'(x,y)<=c'(x,y)=c(x,y)-f(x,y),∴f'(x,y)+f(x,y)<=c(x,y)。形象來看,殘留網路中的屬於原網路的邊的容量為原邊的剩餘容量,則即使該邊滿流,則其剩餘容量加上原流量後必然也滿足容量限制。

(ii)(y,x)∈e,0<=f'(x,y)<=c'(x,y)=f(y,x)<=c(y,x),∴0<=f(y,x)-f'(x,y)<=c(y,x)。形象來看,殘留網路中的反向邊可以看成是原網路中的原邊退流,即原網路中的邊的流量減去乙個值,而這個值是大於0的,所以只要原網路的邊滿足容量限制,則減去乙個大於0的值後必然也滿足容量限制。

②流量守恆:

由於f與f'分別滿足流量守恆,則f+f'也滿足流量守恆。

而要證|f+f'|=|f|+|f'|,可以這樣看,原網路中,從s流出的淨流量加上殘留網路中從s流出的淨流量就等於新的可行流中從s流出的淨流量。

證畢!

推論:若殘留網路中存在f'滿足|f'|>0,則f必然不是最大流(顯然f+f'的流量比f大)。

而反之,命題「若殘留網路中不存在f'滿足|f'|>0,則f必然是最大流」不一定成立。

在殘留網路中,從s出發,沿容量大於0的邊走,能夠走到t,則這條路徑即為一條增廣路徑。

對於乙個可行流f,在其殘留網路中不存在增廣路徑,則f為最大流。

為了證明該定理,我們需要引入割的概念。

將v劃分為s,t滿足s∪t=v,s∩t=∮,且s∈s,t∈t,則[s,t]被稱為乙個割。

c(s,t)=∑∑c(u,v),其中u∈s,v∈t,即所有從s指向t的邊的容量之和。

f(s,t)=∑∑f(u,v)-∑∑f(v,u),其中u∈s,v∈t,即從s流向t的流量之和減去從t流向s的流量之和。

對於流網路的任意乙個割,滿足f(s,t)<=c(s,t)。

證明:

f(s,t)=∑∑f(u,v)-∑∑f(v,u)<=∑∑f(u,v)<=∑∑c(u,v)=c(s,t)。

對於流網路的任意乙個割,滿足f(s,t)=|f|。

為了證明之,我們需要先清楚一些性質:

對於任意的v的子集x,y,定義f(x,y)=∑∑f(u,v)-∑∑f(v,u),其中u∈x,v∈y,設z也是v的乙個子集。

①f(x,y)=f(y,x)。

②f(x,x)=0。

③f(z,x∪y)=f(z,x)+f(z,y),其中x∩y=∮。

④f(x∪y,z)=f(x,z)+f(y,z),其中x∩y=∮。

性質2的證明:

∵s∪t=v,s∩t=∮,∴f(s,v)=f(s,s)+f(s,t)。

∴f(s,t)=f(s,v)-f(s,s)=f(s,v)=f(,v)+f(s-,v)=f(,v)=|f|。

下證f(s-,v)=0:

設集合s'=s-,則s'中既不含源點也不含匯點,故其中的點均滿足流量守恆,流量為0。

f(s',v)=∑∑f(u,v)-∑∑f(v,u)=∑(∑f(u,v)-∑f(v,u))=0,其中u∈s',v∈v。

證畢!

綜合性質1和性質2可得,對於原網路的任意乙個可行流f和任意乙個割,均滿足|f|<=c(s,t)。

任何乙個網路的最大流量等於最小割中邊的容量之和,簡記為「最大流=最小割」。

即以下三個條件等價:

①可行流f是最大流。

②可行流f的殘留網路中不存在增廣路徑。

③存在某個割[s,t],|f|=c(s,t)。

證明:要證①<=>②<=>③,只需證①=>②=>③=>①。

證①=>②:可行流f是最大流,則可行流f的殘留網路中不存在增廣路。

反證法:若可行流f的殘留網路中存在增廣路,則必然可以找到乙個可行流f'滿足|f'|>0,則|f+f'|=|f|+|f'|>|f|。

證③=>①:若存在割[s,t],可行流f滿足|f|=c(s,t),則f是最大流。

由結論,對於任意乙個可行流和任意乙個割均滿足|f|<=c(s,t),故最大流<=最小割<=c(s,t),而最大流》=|f|,而|f|=c(s,t)>=最大流,所以|f|=c(s,t)。

最大流<=最小割,而最小割<=c(s,t)=|f|<=最大流,故最大流=最小割。

證②=>③:若可行流f的殘留網路中不存在增廣路,則必然存在某個割[s,t],某個可行流f,滿足|f|=c(s,t)。

構造集合s:在殘留網路中,從s出發,沿容量大於0的邊走,所有能走到的點的集合。

由於不存在增廣路徑,故t=v-s,s∈s,t∈t,且s∪t=v,s∩t=∮。

故[s,t]是合法的割。

對於任意的x∈s,y∈t,f(x,y)=c(x,y)。

反證法:若f(x,y)0,則y必然能夠被遍歷到,則y∈s,矛盾!

對於任意的a∈t,b∈s,f(a,b)=0。

反證法:若f(a,b)>0,則殘留網路中c'(b,a)=f(a,b)>0,則a必然會被遍歷到,則a∈s,矛盾!

∴|f|=f(s,t)=∑∑f(u,v)-∑∑f(v,u)=∑∑c(u,v)=c(s,t),其中u∈s,v∈t。

證畢!

網路流學習 一 基本概念

容量網路 設g v,e 是乙個有向網路,在v中指定了乙個頂點,稱為源點 記為vs 以及另乙個頂點,稱為匯點 記為vt 對於每一條弧屬於e,對應有乙個權值c u,v 0,稱為弧的容量.通常吧這樣的有向網路g稱為容量網路.弧的流量 通過容量網路g中每條弧,上的實際流量 簡稱流量 記為f u,v 網路流 ...

網路流基本概念和定義

問題 rightarrow 某種方式建圖的網路流 rightarrow 網路流解與原問題解是否等價。流網路是乙個有向圖 g 其中有兩個特殊點 s,t in v 分別為源點和匯點。g 中每一條邊有乙個 ge 0 的權值,稱作邊的容量,邊 u,v 容量可記做 c u,v 源點相當於乙個水源,匯點相當於乙...

流的基本概念

流的基本概念 流按照方向分,分為輸入流和輸出流。是以記憶體為參照物,將資料從資料來源中讀取到記憶體,為輸入流,也稱為讀取流。將資料從記憶體中寫入資料來源,為輸出流,也稱為寫入流。流按照型別分,分為位元組流 字元流和物件流。由於計算機採用二進位制。所以資料的傳輸都是以位元組為單位傳輸。所以,無論是哪種...