網路流是圖論中乙個博大精深的分支。其最主要的難點在於各種模型的建立,我們需要熟練掌握其中的演算法模板並且充分理解其原理,積累建圖經驗,才能在遇到網路流的題目時從容應對。乙個流網路g=(v,e)是一張有向圖,圖中每條有向邊(x,y)∈e都有乙個給定的權值c(x,y),稱為邊的容量。特殊地,若(x,y)不屬於e,則c(x,y)=0。圖中還有兩個特殊的點s,t∈v(s≠t),稱為源點和匯點。本篇blog主要介紹網路流的基本概念,弄清楚這些概念、定理及理解其證明,對於後面的學習會頗有助益。
定義網路的流函式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'|>0,則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必然是最大流」不一定成立。
在殘留網路中,從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|。f(s,t)=∑∑f(u,v)-∑∑f(v,u)<=∑∑f(u,v)<=∑∑c(u,v)=c(s,t)。
為了證明之,我們需要先清楚一些性質:
對於任意的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 源點相當於乙個水源,匯點相當於乙...
流的基本概念
流的基本概念 流按照方向分,分為輸入流和輸出流。是以記憶體為參照物,將資料從資料來源中讀取到記憶體,為輸入流,也稱為讀取流。將資料從記憶體中寫入資料來源,為輸出流,也稱為寫入流。流按照型別分,分為位元組流 字元流和物件流。由於計算機採用二進位制。所以資料的傳輸都是以位元組為單位傳輸。所以,無論是哪種...