經典算法-最大流問題

舉例描述

最大流問題是一個很經典的問題,不少人對此也很熟悉,它可以等同於一個線性規劃問題。下面給出最大流問題的一個基本描述:以下圖所示,s是源點,t爲匯點,每條邊上數字的含義是邊可以容許流過的最大流量。能夠將邊當作管道,0/3表明該管道每秒最多能經過3個單位的流量,0表明當前流量。最大流問題便是說,從s點到t點,最大容許流量是多少?web

這裏寫圖片描述

公式描述

這裏寫圖片描述
的流量等於流出該點的流量。這個能夠理解爲流量守恆,就如同電流同樣,流入一個電阻的電流必然等於流出的電流。

那麼最大流就能夠表示爲: 算法

這裏寫圖片描述

Ford-Fulkerson解法介紹

該方法依賴於三種重要思想:殘留網絡,增廣路徑和割

Ford-Fulkerson思想

Ford-Fulkerson是一種迭代的方法。開始時,對全部的u,v屬於V,f(u,v)=0(這裏f(u,v)表明u到v的邊當前流量),即初始狀態時流的值爲0。在每次迭代中,能夠經過尋找一個「增廣路徑」來增長流值。增廣路徑能夠看作是從源點s到匯點t之間的一條路徑,沿該路徑能夠壓入更多的流,從而增長流的值。反覆進行這一過程,直到增廣路徑都被找出爲止。網絡

增廣路徑

舉個例子來講明下,如圖所示,每條紅線就表明了一條增廣路徑,當前s到t的流量爲3。固然這並非該網絡的最大流,根據尋找增廣路徑的算法咱們其實還能夠繼續尋找增廣路徑。.net

這裏寫圖片描述

殘留網絡

顧名思義,殘留網絡是指給定網絡和一個流,其對應還能夠容納的流組成的網絡。具體說來,就是假定一個網絡G=(V,E),其源點s,匯點t。設f爲G中的一個流,對應頂點u到頂點v的流。在不超過C(u,v)的條件下(C表明邊容量),從u到v之間能夠壓入的額外網絡流量,就是邊(u,v)的殘餘容量(residual capacity),定義以下:cdn

r(u,v)=c(u,v)-f(u,v)htm

舉個例子,假設(u,v)當前流量爲3/4,那麼就是說c(u,v)=4,f(u,v)=3,那麼r(u,v)=1。blog

咱們知道,在網絡流中還有這麼一條規律。從u到v已經有了3個單位流量,那麼從反方向上看,也就是從v到u就有了3個單位的殘留網絡,這時r(v,u)=3。能夠這樣理解,從u到v有3個單位流量,那麼從v到u就有了將這3個單位流量的壓回去的能力。圖片

咱們來具體看一個例子,以下圖所示一個流網絡ci

這裏寫圖片描述

對應的殘留網絡:

這裏寫圖片描述

求解步驟舉例

1.得到殘留網絡

2.窮舉全部的增廣路徑

以下圖所示:

這裏寫圖片描述

計算最大流的標號法

這裏介紹計算網絡最大流的簡便方法—標號法,此方法是Ford—Fulkerson 於1956年提出來的,它的原理是利用尋找增廣鏈來不斷改善可行流。 設μ是網絡中 到 的一條鏈,規定 到 的方向爲μ的方向。 μ上與μ的方向一致的弧稱爲前向弧,前向弧的集合記爲μ+, μ上與μ的方向相反的弧稱爲後向弧,後向弧的集合記爲μ-。it

這裏寫圖片描述
上圖 若給一個可行流{},稱網絡中 = 的弧爲飽和弧,稱 <的弧爲非飽和弧,稱 =0的弧爲零流弧,稱 >0的弧爲非零流弧。 增廣鏈:設{}是可行流, μ是 到 的一條鏈,若μ知足下列條件,則稱μ爲關於 f 的增廣鏈。(注意: f ={}) 1°對於任何( ,)∈μ+,0≤ < (前向弧爲非飽和弧) 2°對於任何( ,)∈μ-,0 <≤ (後向弧爲非零流弧)

參考:

http://blog.csdn.net/smartxxyx/article/details/9275177 http://blog.csdn.net/smartxxyx/article/details/9293665/ 以及: http://dec3.jlu.edu.cn/webcourse/t000048/yun/ch7_04.htm

相關文章
相關標籤/搜索