定义1-网络
一个流网络(flow network),简称网络,是一个简单的加权的简单有向图 G=(V,E,C),边(u,v )
∈
E
\in E
∈E,的权值c(u,v)>0,并称为这条边的容量。当且仅当c(u,v)=0时,(u,v)
∉
E
\not\in E
∈E。此外,图中有两个点分别是源点和汇点,记为s和t。
定义2-流
网络G=(V,E,C)上的一个流f,就是给G中的每一个边(u,v)赋一个实数f(u,v)并满足:
- 每个边的流不能超过他的容量,即 0 ≤ f ( u , v ) ≤ c ( u , v ) 0\leq f(u,v)\leq c(u,v) 0≤f(u,v)≤c(u,v)
- 除了源点S和汇点T外,其他节点的出流量等于入流量,也就是
U
∈
V
−
{
S
,
T
}
U\in V-\{S,T\}
U∈V−{S,T}
∑ u ∈ U f ( u , v ) = ∑ u ∈ U f ( v , u ) \sum_{u\in U}f(u,v)=\sum_{u\in U}f(v,u) u∈U∑f(u,v)=u∈U∑f(v,u)
流网络、流、网络流之间的区别
流网络、流、网络流,看起来极为相似,很多资料中也互相混用,但三者还是有所区别。网络流是指所有容量都是正数的st-网;流代表个体,特指某一条边上的流量;网络流代表整体,表示流网络上所有流的集合。此外,网络流还有另一个含义,指用流网络的模型找出解决问题的方法。网络流的含义究竟是集合还是方法,需要根据具体的上下文而定。通常来讲,这些概念在实际问题中非常直白,不必太过纠结。
定义3-净出流
源点的流出流量-源点的流入流量并且将其标注为
∣
f
∣
|f|
∣f∣。
∣
f
∣
=
∑
v
∈
V
f
(
s
,
v
)
−
∑
v
∈
V
f
(
v
,
s
)
|f|=\sum_{v\in V }f(s,v)-\sum_{v\in V }f(v,s)
∣f∣=v∈V∑f(s,v)−v∈V∑f(v,s)
定义4-规范流
如果边(u,v)和(v,u)上都有非零的流,这样也就是说,这个节点有流入的流,也有流出的流,我们把这样的流称之为非规范流。我们可以将一个方向的流量化为零,也就是说这个节点只有流入的或者流出的流,我们把这个过程称之为规范化,并将这个节点上的流称之为规范流。
定义5-相对流
边(u,v)上的相对流定义如下:
ϕ
(
u
,
v
)
=
f
(
u
,
v
)
−
f
(
v
,
u
)
\phi(u,v)=f(u,v)-f(v,u)
ϕ(u,v)=f(u,v)−f(v,u)
G中所有边的相对流组成一个相对流
ϕ
\phi
ϕ
来几个说明:
- 相对流的引入是为了数学推导的方便,就如代数上引入正负一样。
- ϕ ( u , v ) \phi(u,v) ϕ(u,v)为从u,v的净流量,可正可负,但是 ϕ ( u , v ) = − ϕ ( v , u ) \phi(u,v)=-\phi(v,u) ϕ(u,v)=−ϕ(v,u)
- ∑ v ∈ V ϕ ( v , u ) = 0 \sum_{v\in V}\phi(v,u)=0 ∑v∈Vϕ(v,u)=0 流量守恒,一个节点的所有的相对流之和为0。
- 净出流 ∣ f ∣ |f| ∣f∣的值可以表示为 ∣ f ∣ = ∑ v ∈ V ϕ ( s , v ) |f|=\sum_{v\in V}\phi(s,v) ∣f∣=∑v∈Vϕ(s,v)
规范流和相对流的关系
特别提醒,本段的f(u,v) 表示规范流f。
- 如果规范流f(u,v)>0,那么 ϕ ( u , v ) = f ( u , v ) \phi(u,v)=f(u,v) ϕ(u,v)=f(u,v),否则, ϕ ( u , v ) = − f ( u , v ) \phi(u,v)=-f(u,v) ϕ(u,v)=−f(u,v)
- 从 ϕ \phi ϕ计算f , f ( u , v ) = m a x { 0 , ϕ ( u , v ) } f(u,v)=max\{0,\phi(u,v)\} f(u,v)=max{0,ϕ(u,v)}(就是说,相对流是负的,那么在规范流中一定是被化为0的边)
定义6 -最大流
网络最大流问题是在给定的一个网络流G=(V,E,C),找出最大值的f 或者相对流的问题
定义7-集合间的流量
假设X和Y分别是网络G=(V,E,C)的两个顶点的集合,而f是G上的一个流。
从集合X到Y的流量定义为f(X,Y)=
∑
x
∈
X
∑
y
∈
Y
f
(
x
,
y
)
\sum_{x\in X}\sum_{y\in Y}f(x,y)
∑x∈X∑y∈Yf(x,y)
从集合X到Y的相对流量定义为
ϕ
(
X
,
Y
)
=
∑
x
∈
X
∑
y
∈
Y
ϕ
(
x
,
y
)
\phi(X,Y)=\sum_{x\in X}\sum_{y\in Y}\phi(x,y)
ϕ(X,Y)=∑x∈X∑y∈Yϕ(x,y)
引理1
设f是网络G=(V,E,C)上的一个流。而
ϕ
\phi
ϕ是对应的相对流,又设X,Y,Z 分别是网络中三个顶点的集合,则如下等式成立。
ϕ
(
X
,
X
)
=
0
\phi(X,X)=0
ϕ(X,X)=0
ϕ
(
X
,
Y
)
=
−
ϕ
(
Y
,
X
)
\phi(X,Y)=-\phi(Y,X)
ϕ(X,Y)=−ϕ(Y,X)
此外,如果
X
∪
Y
=
∅
X\cup Y=\varnothing
X∪Y=∅,又如下公式:
ϕ
(
X
∪
Y
,
Z
)
=
ϕ
(
X
,
Z
)
+
ϕ
(
Y
,
Z
)
\phi(X\cup Y,Z)=\phi(X,Z)+\phi(Y,Z)
ϕ(X∪Y,Z)=ϕ(X,Z)+ϕ(Y,Z)
ϕ
(
Z
,
X
∪
Y
)
=
ϕ
(
Z
,
X
)
+
ϕ
(
Z
,
Y
)
\phi(Z,X\cup Y)=\phi(Z,X)+\phi(Z,Y)
ϕ(Z,X∪Y)=ϕ(Z,X)+ϕ(Z,Y)
割及其容量(cut)
网络中的一个割(S,T)就是将顶点集合划分为两个不相交的子集S和T,使得
s
∈
S
,
t
∈
T
s\in S,t \in T
s∈S,t∈T。从S中的点到T中的顶点的边,称其为**穿越边(cross edge)**割(S,T)的容量就是所有穿越边的容量之和。即
c
(
S
,
T
)
=
∑
u
∈
S
∑
v
∈
T
c
(
u
,
v
)
c(S,T)=\sum_{u\in S}\sum_{v\in T} c(u,v)
c(S,T)=u∈S∑v∈T∑c(u,v)
来举个例子吧!如下图所示,求割(S,T)的容量:
c(S,T)=5+3=8 (只包含从集合S到集合T的边)
引理2 源点的净出流和任意割的相对流相等
设f是网络G=(V,E,C)上的一个流,
ϕ
\phi
ϕ是对应的相对流,(S,T)是任意一个割,那么
∣
f
∣
=
ϕ
(
S
,
T
)
|f|=\phi(S,T)
∣f∣=ϕ(S,T)
【注】这里说的流是不是指的这个网络中的所有流的总和?如果是一个单一的流,又怎么会和任意的割产生关系呢? 这是值得思考的。 这里只是用两个符号f和
ϕ
\phi
ϕ代替一个操作符,不指向任何具体的边。
证明(prove):
从穿过这个割的相对流量来推导。(相对就是正减负嘛)
ϕ
(
S
,
T
)
=
ϕ
(
S
,
T
)
+
ϕ
(
S
,
S
)
=
ϕ
(
S
,
T
∪
S
)
=
ϕ
(
S
,
V
)
(
V
是
所
有
顶
点
的
集
合
)
=
ϕ
(
{
S
−
s
}
∪
{
s
}
,
V
)
(
s
指
网
络
G
的
源
点
)
=
ϕ
(
S
−
s
,
V
)
+
ϕ
(
s
,
V
)
(
由
于
V
中
包
含
所
有
节
点
,
所
以
首
项
为
0
)
=
ϕ
(
s
,
V
)
(
相
对
流
的
定
义
,
流
出
−
流
入
,
正
好
是
净
流
量
)
=
∣
f
∣
\begin{aligned} \phi(S,T) & =\phi(S,T)+\phi(S,S) \\ & =\phi(S,T \cup S) \\ & =\phi(S,V) (V是所有顶点的集合)\\ & =\phi(\{S-s\} \cup \{s\} ,V) (s指网络G的源点)\\ & =\phi(S-s,V)+ \phi(s,V)(由于V中包含所有节点,所以首项为0)\\ & =\phi(s,V)(相对流的定义,流出-流入,正好是净流量) \\ &=|f| \end{aligned}
ϕ(S,T)=ϕ(S,T)+ϕ(S,S)=ϕ(S,T∪S)=ϕ(S,V)(V是所有顶点的集合)=ϕ({S−s}∪{s},V)(s指网络G的源点)=ϕ(S−s,V)+ϕ(s,V)(由于V中包含所有节点,所以首项为0)=ϕ(s,V)(相对流的定义,流出−流入,正好是净流量)=∣f∣
引理3 汇点的净入流和任意割的相对流相等
证明方法和引理2类似,我们只要把T分解就可以了
ϕ
(
S
,
T
)
=
ϕ
(
S
,
T
)
+
ϕ
(
T
,
T
)
=
ϕ
(
S
∪
T
,
T
)
=
ϕ
(
V
,
T
)
(
V
是
所
有
顶
点
的
集
合
)
=
ϕ
(
V
,
{
T
−
t
}
∪
{
t
}
)
(
s
指
网
络
G
的
源
点
)
=
ϕ
(
V
,
T
−
t
)
+
ϕ
(
V
,
t
)
(
由
于
V
中
包
含
所
有
节
点
,
所
以
首
项
为
0
)
=
ϕ
(
V
,
t
)
(
相
对
流
的
定
义
,
流
出
−
流
入
,
正
好
是
净
流
量
)
=
∣
f
∣
\begin{aligned} \phi(S,T) & =\phi(S,T)+\phi(T,T) \\ & =\phi(S \cup T,T) \\ & =\phi(V,T) (V是所有顶点的集合)\\ & =\phi(V,\{T-t\} \cup \{t\} ) (s指网络G的源点)\\ & =\phi(V,T-t)+ \phi(V,t)(由于V中包含所有节点,所以首项为0)\\ & =\phi(V,t)(相对流的定义,流出-流入,正好是净流量) \\ &=|f| \end{aligned}
ϕ(S,T)=ϕ(S,T)+ϕ(T,T)=ϕ(S∪T,T)=ϕ(V,T)(V是所有顶点的集合)=ϕ(V,{T−t}∪{t})(s指网络G的源点)=ϕ(V,T−t)+ϕ(V,t)(由于V中包含所有节点,所以首项为0)=ϕ(V,t)(相对流的定义,流出−流入,正好是净流量)=∣f∣
引理4 源点净出流或者汇点净入流恒小于等于任意割的容量
设f是网络G=(V,E,C)上的一个流,
ϕ
\phi
ϕ是对应的相对流,(S,T)是任意一个割,那么
∣
f
∣
≤
c
(
S
,
T
)
|f|\leq c(S,T)
∣f∣≤c(S,T)
证明(prove):
由引理2 可得,
∣
f
∣
=
ϕ
(
S
,
T
)
=
∑
u
∈
S
,
v
∈
T
ϕ
(
u
,
v
)
=
∑
u
∈
S
,
v
∈
T
[
f
(
u
,
v
)
−
f
(
v
,
u
)
]
≤
∑
u
∈
S
,
v
∈
T
f
(
u
,
v
)
(
当
f
是
规
范
流
时
,
等
号
成
立
)
≤
∑
u
∈
S
,
v
∈
T
c
(
u
,
v
)
(
当
f
流
充
满
容
量
时
,
等
号
成
立
)
\begin{aligned} |f|&=\phi(S,T)\\ &=\sum_{u\in S,v\in T} \phi(u,v)\\ &=\sum_{u\in S,v\in T} [f(u,v)-f(v,u)]\\ &\leq\sum_{u\in S,v\in T} f(u,v) (当f是规范流时,等号成立)\\ &\leq \sum_{u\in S,v\in T} c(u,v)(当f流充满容量时,等号成立) \end{aligned}
∣f∣=ϕ(S,T)=u∈S,v∈T∑ϕ(u,v)=u∈S,v∈T∑[f(u,v)−f(v,u)]≤u∈S,v∈T∑f(u,v)(当f是规范流时,等号成立)≤u∈S,v∈T∑c(u,v)(当f流充满容量时,等号成立)
综上,源不等式的以证明。
定义8 剩余网络
设f是网络G=(V,E,C)上的一个流, ϕ \phi ϕ是对应的相对流,对应于f的剩余网络 G f = ( V , E f , C f ) G_f=(V,E_f,C_f) Gf=(V,Ef,Cf)定义为如下的一个流网络:
- 与原网络G有相同的顶点集合V,相同的源点s和汇点t。
- 对于边(u,v),它的剩余容量定义如下 C f ( u , v ) = c ( u , v ) − ϕ ( u , v ) C_f(u,v)=c(u,v)-\phi(u,v) Cf(u,v)=c(u,v)−ϕ(u,v)
- E f E_f Ef包括所有剩余容量大于零的边,即 E f = { ( u , v ) ∣ C f ( u , v ) > 0 } E_f=\{(u,v)|C_f(u,v)>0\} Ef={(u,v)∣Cf(u,v)>0}
下面我们计算下剩余网络:
ϕ
(
s
,
v
1
)
=
10
−
0
=
10
\phi(s,v1)=10-0=10
ϕ(s,v1)=10−0=10
ϕ
(
s
,
v
2
)
=
4
−
0
=
4
\phi(s,v2)=4-0=4
ϕ(s,v2)=4−0=4
ϕ
(
v
1
,
v
2
)
=
5
−
0
=
5
\phi(v1,v2)=5-0=5
ϕ(v1,v2)=5−0=5
ϕ
(
v
1
,
v
3
)
=
5
−
0
=
5
\phi(v1,v3)=5-0=5
ϕ(v1,v3)=5−0=5
ϕ
(
v
2
,
v
3
)
=
4
−
0
=
4
\phi(v2,v3)=4-0=4
ϕ(v2,v3)=4−0=4
ϕ
(
v
2
,
v
4
)
=
5
−
0
=
5
\phi(v2,v4)=5-0=5
ϕ(v2,v4)=5−0=5
ϕ
(
v
3
,
v
4
)
=
0
−
0
=
0
\phi(v3,v4)=0-0=0
ϕ(v3,v4)=0−0=0
ϕ
(
v
3
,
v
5
)
=
9
−
0
=
9
\phi(v3,v5)=9-0=9
ϕ(v3,v5)=9−0=9
ϕ
(
v
4
,
v
5
)
=
5
−
0
=
5
\phi(v4,v5)=5-0=5
ϕ(v4,v5)=5−0=5
C
f
(
s
,
v
1
)
=
15
−
10
=
5
C_f(s,v1)=15-10=5
Cf(s,v1)=15−10=5
C
f
(
v
1
,
s
)
=
0
−
(
−
10
)
=
10
C_f(v1,s)=0-(-10)=10
Cf(v1,s)=0−(−10)=10
C
f
(
s
,
v
2
)
=
4
−
4
=
0
C_f(s,v2)=4-4=0
Cf(s,v2)=4−4=0
C
f
(
v
2
,
s
)
=
0
−
(
−
4
)
=
4
C_f(v2,s)=0-(-4)=4
Cf(v2,s)=0−(−4)=4
C
f
(
v
1
,
v
2
)
=
8
−
5
=
3
C_f(v1,v2)=8-5=3
Cf(v1,v2)=8−5=3
C
f
(
v
2
,
v
1
)
=
3
−
(
−
5
)
=
8
C_f(v2,v1)=3-(-5)=8
Cf(v2,v1)=3−(−5)=8
C
f
(
v
1
,
v
3
)
=
12
−
5
=
7
C_f(v1,v3)=12-5=7
Cf(v1,v3)=12−5=7
C
f
(
v
3
,
v
1
)
=
0
−
(
−
5
)
=
5
C_f(v3,v1)=0-(-5)=5
Cf(v3,v1)=0−(−5)=5
C
f
(
v
2
,
v
3
)
=
7
−
4
=
3
C_f(v2,v3)=7-4=3
Cf(v2,v3)=7−4=3
C
f
(
v
3
,
v
2
)
=
9
−
(
−
4
)
=
13
C_f(v3,v2)=9-(-4)=13
Cf(v3,v2)=9−(−4)=13
C
f
(
v
2
,
v
4
)
=
6
−
5
=
1
C_f(v2,v4)=6-5=1
Cf(v2,v4)=6−5=1
C
f
(
v
4
,
v
2
)
=
0
−
(
−
5
)
=
5
C_f(v4,v2)=0-(-5)=5
Cf(v4,v2)=0−(−5)=5
C
f
(
v
3
,
v
4
)
=
0
−
0
=
0
C_f(v3,v4)=0-0=0
Cf(v3,v4)=0−0=0
C
f
(
v
4
,
v
3
)
=
2
−
0
=
2
C_f(v4,v3)=2-0=2
Cf(v4,v3)=2−0=2
C
f
(
v
3
,
v
5
)
=
16
−
9
=
7
C_f(v3,v5)=16-9=7
Cf(v3,v5)=16−9=7
C
f
(
v
5
,
v
3
)
=
0
−
(
−
9
)
=
9
C_f(v5,v3)=0-(-9)=9
Cf(v5,v3)=0−(−9)=9
C
f
(
v
4
,
v
5
)
=
5
−
5
=
0
C_f(v4,v5)=5-5=0
Cf(v4,v5)=5−5=0
C
f
(
v
5
,
v
4
)
=
0
−
(
−
5
)
=
5
C_f(v5,v4)=0-(-5)=5
Cf(v5,v4)=0−(−5)=5
选择
C
f
C_f
Cf大于零的项,从重新绘制剩余网络图:
边的剩余流量的分析说明:
C
f
(
u
,
v
)
=
c
(
u
,
v
)
−
ϕ
(
u
,
v
)
=
c
(
u
,
v
)
−
[
f
(
u
,
v
)
−
f
(
v
,
u
)
]
=
[
c
(
u
,
v
)
−
f
(
u
,
v
)
]
+
f
(
v
,
u
)
\begin{aligned}C_f(u,v)&=c(u,v)-\phi(u,v)\\ &=c(u,v)-[f(u,v)-f(v,u)]\\ &=[c(u,v)-f(u,v)]+f(v,u) \end{aligned}
Cf(u,v)=c(u,v)−ϕ(u,v)=c(u,v)−[f(u,v)−f(v,u)]=[c(u,v)−f(u,v)]+f(v,u)
上式表明,剩余容量有两部分组成:
- (边的容量-流)之后的剩余容量
- 将流f(v,u)从u 推回到v去 产生的相对容量
【注】如果 ( u , v ) ∈ E f (u,v)\in E_f (u,v)∈Ef,必有 ( u , v ) ∈ E (u,v)\in E (u,v)∈E或者 ( v , u ) ∈ E (v,u)\in E (v,u)∈E 可见 ∣ E f ∣ ≤ 2 ∣ E ∣ |E_f|\leq 2|E| ∣Ef∣≤2∣E∣,这里的绝对值可以看作边数,也就是剩余网络的边数小于等于原网络的边数,则构造剩余网络的时间复杂度时 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(∣V∣+∣E∣) ,此处不懂怎末计算的时间复杂度,先存档。