網絡流算法(Ford-fulkerson方法)


一. 預備知識

1. 流網絡:

有向圖G=(V,E)滿足(1)存在無入邊的源結點s(2)存在無出邊的目標點t(3)每條邊e都有一個非負容量ci

2. 流

流網絡中從s-t的流是一個實值函數 f ,滿足

 

3. 余圖(殘存網絡)

對於流網絡G,邊容量為c,流為f,則定義殘存容量cf 為

 

 

 即,對每一條邊,正向記為:c - f,逆向記為:f

 

圖(a)為一個流網絡,圖(b)展示了它的余圖 

 

4. 增廣路徑

在余圖中找到一條s~>t最大流量的路徑,該路徑為增廣路徑

上圖(b)中s-v2-v3-t,容量為4的路徑即為增廣路徑

5. 流網絡的切割

流網絡G中的一個切割(S,T)將結點集合V划分為S和T=V-S兩個集合,滿足s€S,t€T。

  • 切割的凈流量:

                    

  • 切割的容量:

                    

 

推論:流和割弱對偶關系

給定流網絡 G=(V,E),s是源,t是匯.  設f是G上的 一個流,S,T是G的任意一個切割,則f(S,T)=| f |.

給定流網絡 G=(V,E). 設f是G上的一個流,S,T 是G的任意一個割,則| f | <= c(S,T)

 

 

二.最大流算法(基本的Ford-fulkerson方法)

1. 思路:

(1)初始化:對所有的e,f( e ) = 0

(2)while迭代:

                        只要G的余圖中存在增廣路徑P,沿着P更新 流 和 余圖

        直到不存在P

(3) 得到最大流

2. 定理

 

3. 算法正確性證明

(1)可終止性:不妨將容量放縮,乘一個系數使之成為整數,則每次流至少增加整數1,則可終止

(2)時間復雜度:O(mC),m:邊的數量,C:最大流 | f |。

(3)正確性:

設FF算法在流 f 上停止

則,不存在s - t 的路徑P,即s 與 t不連通

設:與s連通的點集為S,

則(S,V-S)是G的一個切割

對任意的u€S,v€V-S,f(u,v) = c(u,v)

則| f | = c(S,T)

而| f | <= c(S,T)

則f是最大流。

4. 算法改進:

--算法優劣主要取決於尋找增廣路徑的時間復雜度

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM