一. 預備知識
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. 算法改進:
--算法優劣主要取決於尋找增廣路徑的時間復雜度

