網絡流分析

 

Ford-Fulkerson算法

 

 

殘量網絡算法

  從直觀上看,給定網絡$G$和流量$f$,殘量網絡$G_f$由那些仍有空間對流量進行調整的邊構成。流網絡容許的額外流量等於其容量減去該邊的流量:$c_f(u, v) = c(u, v)-f(u, v)$,差值爲正則將這條邊置於圖$G_f$中。因爲只容許有額外流量的邊加入圖$G_f$,若$c_f(u,v)=0$的話,則該邊不屬於圖$G_f$。網絡

  殘留網絡$G_f$還可能包含圖$G$中不存在的邊。算法對流量進行操做的目標是增長總流量,爲此,算法可能對某些特定邊上的流量進行縮減。爲了表示對於一個正流量$f(u, v)$的縮減,咱們將邊$(v,u)$加入到圖$G_f$中,並將其殘存容量設爲$c_f(v, u)=f(u, v)$。也就是說,一條邊能容許的反向流量最多將其正向流量抵消。圖$G_f$中的反向邊容許將發送過來的流量發送回去,等同於縮減該條邊的流量,也稱爲抵消操做。這類抵消操做對任何最大流算法都是很是關鍵的,在許多算法中也都是必須的。spa

  更形式化地,考慮結點對$u, v\in V$,殘量容量$c_f(u, v)$以下:blog

$$c_f(u, v)=\left\{\begin{matrix}
c(u,v)-f(u,v) & if\ (u,v)\in E\\ 
f(u,v)& if\ (v,u)\in E\\ 
0& Others
\end{matrix}\right.$$
io

下圖爲給定網絡$G$和其殘量網絡$G_f$:route

(通俗的來說,不管對於殘量網絡中哪條邊,都表示其還能再有多少流量通過。只不過可能含義不一樣。$(u, v)$的含義是增長這條邊的流量,$(v, u)$的含義爲減小這條邊的流量,它們都能對流量進行調整)im

增廣路徑 img

給定網絡$G=(V, E)$和流$f$,增廣路徑$p$是殘量網絡中一條從源結點$s$到匯點$t$的簡單路徑。集合

咱們在一條增廣路徑$p$上可以爲每條邊增長的流量的最大值爲:ant

$$c_f(p) = min\left \{ c_f(u, v):\ (u, v)\in route \ p \right \}$$

流網絡的切割

  $Ford-Fulkerson$算法核心是沿着增廣路徑重複增長路徑上的流量,知道找到一個最大流爲止。咱們怎麼知道在算法終止時,確實找到一個最大流呢?而最大流最小割定理告訴咱們,一個流是最大流當且僅當其殘量網絡不包含任何增廣路徑。

咱們先來看一下流網絡中的切割概念,作一點小分析。

網絡流$G=(V, E)$中一個切割$(S, T)$將節點集合$V$劃分爲$S$和$T=V-S$兩個集合,使得$s\in S, t\in T$。

淨流量$f(S, T)$以下:$$f(S, T) = \sum_{u\in S}\sum_{v\in T}f(u, v)-\sum_{u\in S}\sum_{v\in T}f(v, u)$$

切割$(S,T)$的容量是:$$c(S,T)=\sum_{u\in S}\sum_{v\in T}c(u, v)$$

一個網絡的最小切割是整個網絡中容量最小的切割

以下圖1-2所示,從$s$運送到$t$的物品必然經過跨越$S$和$T$的邊,則有:

$$|f|=f(S,T)=\sum_{u\in S}\sum_{v\in T}f(u, v)-\sum_{u\in S}\sum_{v\in T}f(v, u)\leqslant \sum_{u\in S}\sum_{v\in T}f(u, v)\leqslant \sum_{u\in S}\sum_{v\in T}c(u, v)=c(S,T)$$

             圖1-1                        圖1-2

 

[最大流最小割定理設$f$爲流網絡$G=(V, E)$中的一個流,該流網絡的源節點是$s$,匯點爲$t$,則下列條件是等價的:

  1.$f$是$G$的一個最大流。

  2.殘量網絡$G_f$不包括任何增廣路徑。

  3.$|f|=c(S, T)$,其中$(S, T)$是流網絡$G$的某個切割

簡要證實以下:

若是$G_f$不包含任何增廣路徑,即不存在$s$到$t$的路徑。咱們定義$S = \left \{ v\in V: G_f中存在s到v的路徑 \right \}$,$T=V-S$。顯然劃分$(S,T)$是流網絡$G$的一個切割。

對於一對結點$u\in S$和$v\in T$。若$(u, v)\in E$,則必有$f(u, v)=c(u, v)$;若$(v, u)\in E$,則必有$f(u, v)=0$。不然,在殘量網絡$G_f$中就有跨越集合$S$到到$T$的邊,和不包含增廣路徑的條件是相悖的。

因而咱們就獲得了:

$$f(S, T) = \sum_{u\in S}\sum_{v\in T}f(u, v)-\sum_{u\in S}\sum_{v\in T}f(v, u)=\sum_{u\in S}\sum_{v\in T}c(u, v)-\sum_{u\in S}\sum_{v\in T}0=c(S,T)$$

又對全部切割$(S,T)$,都知足$|f|\leqslant c(S, T)$,即$|f|_{max}\leqslant c(S, T)_{min}$。稍加證實就能夠獲得:在增廣路算法結束時,$f$是$s-t$的最大流,$(S,T)$是圖的$s-t$最小割

相關文章
相關標籤/搜索