1
基本概念和術語
(
1
)
網路
G
是一個簡單有向圖,
G=(V,E)
,
V={1
,
2
,
…
,
n}
。在
V
中指定一個頂點
s
,稱為源
和另一個頂點
t
,稱為匯
。有向圖
G
的每一條邊
(v,w)
∈
E
,對應有一個值
cap(v,w)≥0
,稱為邊的容量
。這樣的有向圖
G
稱作一個網路
。
(
2
)
網路流
網路上的流
是定義在網路的邊集合
E
上的一個非負函數
flow={flow(v,w)}
,並稱
flow(v,w)
為邊
(v,w)
上的流量
。
(
3
)
可行流
滿足下述條件的流
flow
稱為可行流
:
①
容量約束
:
對每一條邊
(v,w)
∈
E
,
0≤flow(v,w)≤cap(v,w)
。
②
平衡約束
:
對於中間頂點:流出量
=
流入量。
即對每個
v
∈
V(v≠s,t)
有:頂點
v
的流出量-頂點
v
的流入量
=0
,即
對於源
s
:
s
的流出量-
s
的流入量
=
源的淨輸出量
f
,即
對於匯
t
:
t
的流入量-
t
的流出量的
=
匯的淨輸入量
f
,即
式中
f
稱為這個可行流的流量,即源的淨輸出量
(
或匯的淨輸入量
)
。可行流總是存在的。
例如,讓所有邊的流量
flow(v,w)=0
,就得到一個其流量
f=0
的可行流
(
稱為
0
流
)
。
(
4
)
邊流
對於網路
G
的一個給定的可行流
flow
,將網路中滿足
flow(v,w)=cap(v,w)
的邊稱為飽和邊
;
flow(v,w)<cap(v,w)
的邊稱為非飽和邊
;
flow(v,w)=0
的邊稱為零流邊
;
flow(v,w)>0
的邊稱為非零流邊
。當邊
(v,w)
既不是一條零流邊也不是一條飽和邊時,稱為弱流邊
。
(
5
)
最大流
最大流問題即求網路
G
的一個可行流
flow
,使其流量
f
達到最大。即
flow
滿足:0≤flow(v,w)≤cap(v,w)
,
(v,w)
∈
E
;且
(
6
)
流的費用
實際應用中,與網路流有關的問題,不僅涉及流量,而且還有費用的因素。此時網路的每一條邊
(v,w)
除了給定容量
cap(v,w)
外,還定義了一個單位流量費用
cost(v,w)
。對於網路中一個給定的流
flow
,其費用定義為:
(
7
)
殘流網路
對於給定的一個流網路
G
及其上的一個流
flow
,網路
G
關於流
flow
的殘流網路
G*
與
G
有相同的頂點集
V
,而網路
G
中的每一條邊對應於
G*
中的
1
條邊或
2
條邊。
設
(v,w)
是
G
的一條邊。
當
flow(v,w)>0
時,(
w,v
)是
G*
中的一條邊,該邊的容量為
cap*(w,v)=flow(v,w)
;
當
flow(v,w)<cap(v,w)
時,
(v,w)
是
G*
中的一條邊,該邊的容量為cap*(v,w)=cap(v,w)-flow(v,w)
。
按照殘流網路的定義,當原網路
G
中的邊
(v,w)
是一條零流邊時,殘流網路
G*
中有唯一的一條邊
(v,w)
與之對應,且該邊的容量為
cap(v,w)
。
當原網路
G
中的邊
(v,w)
是一條飽和邊時,殘流網路
G*
中有唯一的一條邊
(w,v)
與之對應,且該邊的容量為
cap(v,w)
。
當原網路
G
中的邊
(v,w)
是一條弱流邊時,殘流網路
G*
中有
2
條邊
(v,w)
和
(w,v)
與之對應,這
2
條邊的容量分別為
cap(v,w) -flow(v,w)
和
flow(v,w)
。
殘流網路是設計與網路流有關演算法的重要工具。
增廣路演算法
1 演算法基本思想
設P是網路G中連接源s和匯t的一條路。定義路的方向是從s到t。將路P上的邊分成2類:一類邊的方向與路的方向一致,稱為向前邊
。向前邊的全體記為P+。另一類邊的方向與路的方向相反,稱為向後邊
。向後邊的全體記為P-。
設flow是一個可行流,P是從s到t的一條路,若P滿足下列條件:
(1)在P的所有向前邊(v,w)上,flow(v,w)<cap(v,w),即P+中的每一條邊都是非飽和邊;
(2)在P的所有向後邊(v,w)上,flow(v,w)>0,即P-中的每一條邊都是非零流邊。
則稱P為關於可行流flow的一條可增廣路
。
可增廣路是殘流網路中一條容量大於0的路。
將具有上述特徵的路P稱為可增廣路是因為可以通過修正路P上所有邊流量flow(v,w)將當前可行流改進成一個流值更大的可行流。
增流的具體做法是:
(1)不屬於可增廣路P的邊(v,w)上的流量保持不變;
(2)可增廣路P上的所有邊(v,w)上的流量按下述規則變化:
· 在向前邊(v,w)上,flow(v,w)+d;
· 在向後邊(v,w)上,flow(v,w)-d。
按下面的公式修改當前的流。
其中d稱為可增廣量,可按下述原則確定:d取得盡量大,又要使變化後的流仍為可行流。按照這個原則,d既不能超過每條向前邊(v,w)的cap(v,w)-flow(v,w),也不能超過每條向後邊(v,w)的flow(v,w)。因此d應該等於向前邊上的cap(v,w)-flow(v,w)與向後邊上的flow(v,w)的最小值。也就是殘流網路中P的最大容量。
增廣路定理
:設flow是網路G的一個可行流,如果不存在從s到t關於flow的可增廣路P,則flow是G的一個最大流。
動畫示範一:
動畫示範二: