網路流基本概念和定義

2022-06-05 12:06:07 字數 3556 閱讀 5095

問題 \(\rightarrow\) 某種方式建圖的網路流 \(\rightarrow\) 網路流解與原問題解是否等價。

流網路是乙個有向圖\(g\),其中有兩個特殊點 \(s,t\in v\) ,分別為源點匯點。\(g\) 中每一條邊有乙個 \(\ge 0\) 的權值,稱作邊的容量,邊 \((u,v)\) 容量可記做 \(c(u,v)\)。

源點相當於乙個水源,匯點相當於乙個大海,中間的邊和點相當於河流水道,水從水源流出,流經河道,流向大海。容量描述的就是這些河流水道的寬度/深度/etc.。

為了簡化問題,我們假設若存在邊 \((u,v)\in e\),則不存在 \((v,u)\in e\) 。

其實我們也有一種辦法消除這種邊,只需要將 \((v,u)\) 拆成 \((v,t)\) 和 \((t,u)\) 就可以了。

總之,在考慮問題時,不用考慮反向邊

對於每乙個流網路,我們可以考慮它的任意乙個可行流(可簡稱流),流用 \(f\) 來表示,\(f(u,v)\) 表示的是單位時間內從 \(u\) 點到 \(v\) 點流經邊 \((u,v)\) 的流。

通俗的來說,就是河道裡面流了多少水。

就是說我們要指定每一條邊的流量得到乙個方案 \(f\) ,若滿足兩個條件:容量限制流量守恆,則稱這個 \(f\) 是乙個可行流。

容量限制:流經邊的流量小於等於邊的容量,即:

\[0 \le f(u,v) \le c(u,v)

\]流量守恆:除了源點匯點之外其他點不能儲存流量。也就是說,流入的流量之和應該等於流出的流量之和,即:

\[\sum_f(u,v)=\sum_f(v,u)

\]我們完全不用考慮反向邊。

對於乙個可行流 \(f\) ,\(|f|\) 代表這個可行流的流量值,表示流從源點流向匯點的速率。我們定義:

\[|f|=\sum_f(s,v)-\sum_ f(v,s)

\]就是單位時間內從源點流出的總流量減去從源點流入的總流量

最大流,也叫最大可行流,乙個流 \(f\) 是最大流當且僅當 \(|f|\) 最大。

定義乙個有向圖 \(g\) 對應乙個可行流 \(f\) 的殘留網路 \(g_f\) ,其 \(v_f=v\ ,\ e_f=e+\\),其每條邊的容量 \(c^(u,v)\) 與原圖及對應可行流 \(f\) 的關係如下:

\[c^(u,v)=

\begin

c(u,v)-f(u,v) &,&(u,v)\in e\\

\\f(v,u) &,&(v,u)\in e

\end

\]可以看出,對於原網路的任意乙個可行流都可以建立乙個殘留網路。

上圖示:(紅色為可行流,藍色為容量)

這個網路的殘留網路應為:(紅色為反向邊及其權值,藍色為原圖有的邊及其權值)

殘留網路的性質在殘留網路裡面,從源點開始沿容量大於0的邊走到匯點的簡單路徑稱為增廣路徑,也叫流增廣路徑。

增廣路徑一定是原網路的乙個可行流。

性質有向圖 \(g\) 的割為點集 \(v\) 的乙個劃分方案 \(\) 使得 \(s\cap t=\varnothing,s\cup t=v\)。

乙個割 \(\) 的容量 \(c(s,t)\) 為

\[c(s,t) = \sum_\sum_ c(u,v)

\]最小割指的一般是最小容量割。

乙個割 \(\) 在可行流 \(f\) 下的流量 \(f(s,t)\) 為

\[f(s,t)=\sum_\sum_f(u,v)-\sum_\sum_f(u,v)

\]運算方式

接下來定義點集子集(不一定沒有交集)之間的流量運算方式

對於點集 \(x,y\subsetneq v\)

\[f(x,y)=\sum_\sum_f(u,v)-\sum_\sum_f(u,v)

\]推出如下運算律:

\(f(x,y)=-f(y,x)\)

\(f(x,x)=0\)

\(f(z,x\cup y)=f(z,x)+f(z,y)\)

\(f(x\cup y,z)=f(x,z)+f(y,z)\)

性質對於任意割 \(\) ,其流量一定小於等於容量。

定義式相加易得。

對於割 \(\),其對應的可行流的值 \(|f|=f(s,t)\)。

由流量守恆原則易得。

對於任意乙個 \(f\) ,有 \(|f|\le c(s,t)\) 對任意割成立。

推論:最大流流量小於等於最小割容量

對於乙個網路 \(g\) ,乙個流 \(f\) 是最大流 \(^①\) ,等價於 \(g\) 的殘留網路 \(g_f\) 中沒有增廣路 \(^②\),等價於存在乙個割 \(\) 使得 \(|f|=c(s,t)^③\) 。

證明

\[\begin

①\rightarrow②:&

設f是圖g的最大流\\

&假設殘留網路g_f存在增廣路|f^|>0\\

&\because f+f^一定為可行流and |f+f^|>f\\

&\therefore 假設不成立\\

&故原命題成立\\

\end\\

\ \\

\begin

②\rightarrow③:&

定義s為在g_f中從s開始沿著容量大於0的邊走左右能走到的點。\\

&可以知道,由於g_f沒有增廣路,所以t\notin s\\

&令:t=v-s(v為整個圖所有點的點集)\\

&則是乙個合法的割。\\

&任取x\in s, y\in t\\

&\because g_f沒有增廣路\\

&\therefore f(x,y)=c(x,y)當(x,y)\in e\\

&\quad f(y,x)=0,當(y,x)\in e\\

&\because |f|=f(s,t)=\sum_\sum_f(u,v)-\sum_\sum_ f(v,u)\\

&\therefore |f|=\sum_\sum_c(u,v)=c(s,t)

\end\\

\ \\

\begin

③\rightarrow①:&

設f為圖g的可行流,f_ 為圖g的最大流。\\

&\therefore |f|\le |f_|\\

&\because |f|=c(s,t)\\

&又\because c(s,t)\ge |f_|\\

&\therefore f=f_\\

\\\end\\

綜上,①\leftrightarrow ②\leftrightarrow ③,q.a.d

\]基於最大流最小割定理,我們可以得到如下方法求解最大流。

輸入乙個網路 \(g\)

確定乙個可行流 \(f\),為當前可行流

在其殘留網路\(g_f\)中尋找增廣路徑 \(f^\)。

更新當前可行流為 \(f+f^\)

轉3,若找不到增廣路,輸出當前可行流。

網路流基本概念

網路流是圖論中乙個博大精深的分支。其最主要的難點在於各種模型的建立,我們需要熟練掌握其中的演算法模板並且充分理解其原理,積累建圖經驗,才能在遇到網路流的題目時從容應對。本篇blog主要介紹網路流的基本概念,弄清楚這些概念 定理及理解其證明,對於後面的學習會頗有助益。乙個流網路g v,e 是一張有向圖...

網路流學習 一 基本概念

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

樹 定義和基本概念

一 樹 tree 是n n 0 個結點的有限集。n 0時稱為空樹。在任意一棵非空樹中 1 有且僅有乙個特定的稱為根 root 的結點。2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹 subtree 如圖1所示 樹的定義之中...