CSDN 有字数限制,因此笔记分别发布,目前:
容量网络:如果一个加权有向网络 D D D 满足如下三个条件:①存在唯一一个入度为 0 0 0 的顶点,称为源;②存在唯一一个出度为 0 0 0 的顶点,称为汇;③每条弧 ( v i , v j ) (v_i,v_j) (vi,vj) 赋权 c i j c_{ij} cij 是一个非负数,称为弧 ( v i , v j ) (v_i,v_j) (vi,vj) 的容量,则把这个加权有向网络 D D D 称为容量网络。
流:设
D
D
D 是一个容量网络,令
c
i
j
c_{ij}
cij 表示弧
(
v
i
,
v
j
)
(v_i,v_j)
(vi,vj) 的容量。设
f
f
f 是定义在
D
D
D 的弧集上的一个函数,它赋予每条弧
(
v
i
,
v
j
)
(v_i,v_j)
(vi,vj) 一个非负实数
f
i
j
f_{ij}
fij,若
f
f
f 满足:①
f
i
j
≤
c
i
j
f_{ij} \leq c_{ij}
fij≤cij;②
∀
v
j
∈
V
(
D
)
\forall v_j \in V(D)
∀vj∈V(D) \
{
v
s
,
v
t
}
\{v_s,v_t\}
{vs,vt} 有
∑
(
v
i
,
v
j
)
∈
E
(
D
)
f
i
j
=
∑
(
v
j
,
v
i
)
∈
E
(
D
)
f
j
i
\sum_{(v_i,v_j)\in E(D)} f_{ij} = \sum_{(v_j,v_i)\in E(D)} f_{ji}
∑(vi,vj)∈E(D)fij=∑(vj,vi)∈E(D)fji,则称
f
f
f 为容量网络
D
D
D 的一个流,称
f
i
j
f_{ij}
fij 为弧
(
v
i
,
v
j
)
(v_i,v_j)
(vi,vj) 上的流量。
(非)饱和弧:弧上的流量(未)达到弧的容量。
定理:设
f
f
f 是容量网络
D
D
D 的一个流,其中源为
v
s
v_s
vs,汇为
v
t
v_t
vt,由源的流出量等于汇的流入量,即
∑
(
v
s
,
v
j
)
∈
E
(
D
)
f
s
i
=
∑
(
v
i
,
v
t
)
∈
E
(
D
)
f
i
t
\sum_{(v_s,v_j)\in E(D)}f_{si}=\sum_{(v_i,v_t)\in E(D)}f_{it}
∑(vs,vj)∈E(D)fsi=∑(vi,vt)∈E(D)fit
证明:注意到每条弧上的流量,既是其头顶点的流入量,也是其尾顶点的流出量,因此所有弧上的流量之和、所有顶顶啊的流入量之和、所有顶点的流出量之和,这三者相等。
流值:设
f
f
f 是容量网络
D
D
D 的一个流,其源为
v
s
v_s
vs,汇为
v
t
v_t
vt,称源的流出量为流
f
f
f 的流值,记作
v
a
l
(
f
)
val(f)
val(f)。
最大流:设
D
D
D 是一个容量网络,若
f
f
f 是
D
D
D 上流值最大的流,则把
f
f
f 称为
D
D
D 的最大流。
截:设
D
D
D 是一个容量网络,源为
v
s
v_s
vs,汇为
v
t
v_t
vt。设顶点子集
S
⊂
V
(
D
)
,
S
‾
=
V
(
D
)
S \subset V(D),\overline{S}=V(D)
S⊂V(D),S=V(D) \
S
S
S,且
v
s
∈
S
,
v
t
∈
S
‾
v_s\in S, v_t \in \overline{S}
vs∈S,vt∈S,则称弧集
{
(
v
i
,
v
j
)
∈
E
(
D
)
∣
v
i
∈
S
,
v
j
∈
S
‾
}
\{(v_i,v_j)\in E(D)|v_i \in S, v_j \in \overline{S}\}
{(vi,vj)∈E(D)∣vi∈S,vj∈S} 为容量网络
D
D
D 的截,记作
(
S
,
S
‾
)
(S,\overline{S})
(S,S)。
截的容量:
∑
(
v
i
,
v
j
)
∈
(
S
,
S
‾
)
c
i
j
\sum_{(v_i,v_j)\in(S,\overline{S})}c_{ij}
∑(vi,vj)∈(S,S)cij,记作
c
(
S
,
S
‾
)
c_(S,\overline{S})
c(S,S)。
最小截:容量达最小的截为最小截。
定理:设
D
D
D 是一个容量网络,源为
v
s
v_s
vs,汇为
v
t
v_t
vt。设
f
f
f 是容量网络
D
D
D 的一个流,
(
S
,
S
‾
)
(S,\overline{S})
(S,S) 是
D
D
D 的一个截,则有
v
a
l
(
f
)
≤
c
(
S
,
S
‾
)
val(f) \leq c(S,\overline{S})
val(f)≤c(S,S)。
证明:…
流值与截容量相等当且仅当每条弧都是饱和弧且无逆流的时候。
若容量网络的一个流
f
f
f 的流值等于某个截
(
S
,
S
‾
)
(S,\overline{S})
(S,S)的容量,即
c
(
S
,
S
‾
)
=
v
a
l
(
f
)
c(S,\overline{S})=val(f)
c(S,S)=val(f),则
f
f
f 为最大流,
(
S
,
S
‾
)
(S,\overline{S})
(S,S) 为最小截。
可增路:设 P P P 是一条 ( v s , v j ) (v_s,v_j) (vs,vj) 路,如果①对 P P P 中每条正向弧 ( v i , v j ) , f i j < c i j (v_i,v_j),f_{ij} < c_{ij} (vi,vj),fij<cij;②对 P P P 中每条反向弧 ( v i , v j ) , f i j > 0 (v_i,v_j),f_{ij} > 0 (vi,vj),fij>0,则称 ( v s , v j ) (v_s,v_j) (vs,vj) 为 f f f 非饱和路;否则为饱和路。从源到汇的 f f f 非饱和路,称为 f f f 可增路。
定理:设容量网络
D
D
D 的源为
v
s
v_s
vs,汇为
v
t
v_t
vt,
f
f
f 为
D
D
D 的一个流,则
f
f
f 为最大流当且仅当
D
D
D 中不存在
f
f
f 可增路。
证明:只需证明充分性。只需证明存在截
(
S
,
S
‾
)
(S,\overline{S})
(S,S) 满足:
(
S
,
S
‾
)
(S,\overline{S})
(S,S) 中的每条弧都是饱和弧,
(
S
‾
,
S
)
(\overline{S}, S)
(S,S) 中的每条弧都是零弧。
将顶点分类,令
S
=
{
v
s
}
∪
{
v
j
∣
存在一条
f
非饱和路
(
v
s
,
v
j
)
}
S=\{v_s\} \cup \{v_j|存在一条 f 非饱和路 (v_s,v_j)\}
S={vs}∪{vj∣存在一条f非饱和路(vs,vj)},故有
v
t
∈
S
‾
v_t \in \overline{S}
vt∈S 。
则
S
S
S 与
S
‾
\overline S
S 之间假设
f
i
j
<
c
i
j
f_{ij} < c_{ij}
fij<cij,易见
P
+
(
v
i
,
v
j
)
P+(v_i,v_j)
P+(vi,vj) 亦为
f
f
f 非饱和路,与
v
j
∈
S
‾
v_j \in \overline{S}
vj∈S 矛盾。同理可以证明
f
i
j
=
0
f_{ij}=0
fij=0。
标号法能求解可增路
最大流算法结束时,最大流流值等于最小截容量。
定理:在任何容量网络
D
D
D 中,最大流的流值等于最小截的容量。
证明:(大致思路)设
S
S
S 为能用标号法能够获得标号的顶点集合,则
(
S
,
S
‾
)
(S,\overline{S})
(S,S) 之间的弧的值必定为
0
0
0。
流 f f f 的费用:设容量网络 D D D 的源为 v s v_s vs,汇为 v t v_t vt, c i j c_{ij} cij 和 b i j b_{ij} bij 分别表示弧 ( v i , v j ) (v_i,v_j) (vi,vj) 上的容量和单位流量费用,设 f f f 是 G G G 的流,则称 b ( f ) = ∑ ( v i , v j ) ∈ E ( D ) f i j b i j b(f)=\sum_{(v_i,v_j)\in E(D)}f_{ij}b_{ij} b(f)=∑(vi,vj)∈E(D)fijbij 为流 f f f 的费用。在容量网络 D D D 的所有最大流中寻找费用最小的流,这样的流称为最小费用最大流。
增广圈:设 Q Q Q 是一个具有指定正向的圈, Q + Q^+ Q+ 为圈 Q Q Q 上正向弧的集合, Q − Q^- Q− 为圈 Q Q Q 上反向弧的集合。
δ
(
Q
)
=
m
i
n
{
δ
i
j
∣
(
v
i
,
v
j
)
∈
E
(
Q
)
}
\delta(Q)=min\{\delta_{ij}|(v_i,v_j) \in E(Q)\}
δ(Q)=min{δij∣(vi,vj)∈E(Q)}。
若
δ
(
Q
)
>
0
\delta(Q)>0
δ(Q)>0,则称
δ
(
Q
)
\delta(Q)
δ(Q) 为允许修改流量,称圈
Q
Q
Q 为容量网络
D
D
D 上关于流
f
f
f 的增广圈。
对于
f
f
f 增广圈
Q
Q
Q,我们可以定义
f
′
f'
f′:
这样 f ′ f' f′ 仍是 D D D 的流并且 v a l ( f ′ ) = v a l ( f ) val(f')=val(f) val(f′)=val(f),称 f ′ f' f′ 为基于 f f f 增广圈 Q Q Q 的修正流。
负圈:设有容量网络 D D D, f f f 是一个流, f i j , c i j , b i j f_{ij},c_{ij},b_{ij} fij,cij,bij 分别为弧 ( v i , v j ) (v_i,v_j) (vi,vj) 上的流量、容量和单位费用,设 Q Q Q 是关于流 f f f 的增广圈。称 b ( Q , f ) = ∑ ( v i , v j ) ∈ Q + b i j − ∑ ( v i , v j ) ∈ Q − b i j b(Q,f)=\sum_{(v_i,v_j)\in Q^+}b_{ij}-\sum_{(v_i,v_j)\in Q^-}b_{ij} b(Q,f)=∑(vi,vj)∈Q+bij−∑(vi,vj)∈Q−bij 为增广圈的费用,若小于 0 0 0,则称 Q Q Q 为负圈。负圈与流量、容量、费用、圈的指定方向有关。
算法:
定理:设有容量网络 D D D, f f f 是一个流, f i j , c i j , b i j f_{ij},c_{ij},b_{ij} fij,cij,bij 分别为弧 ( v i , v j ) (v_i,v_j) (vi,vj) 上的流量、容量和单位费用,则 f f f 是最小费用最大流当且仅当任何 f f f 增广圈 Q Q Q 的费用 b ( Q , f ) ≥ 0 b(Q,f)\geq0 b(Q,f)≥0,即无负圈。
Euler图:如果图
G
G
G 中存在包含所有边的闭迹
W
W
W,则称
G
G
G 为
E
u
l
e
r
Euler
Euler 图,
W
W
W 称为
G
G
G 的
E
u
l
e
r
Euler
Euler 闭迹。
半Euler图:如果图
G
G
G 中存在包含所有边的迹
P
P
P,则称
G
G
G 为
半
E
u
l
e
r
半Euler
半Euler 图,
P
P
P 称为
G
G
G 的
E
u
l
e
r
Euler
Euler 迹。
定理:设
G
G
G 为非空连通图,则下面三个命题等价:
证明:
有向Euler图:若有向图
D
D
D 中存在包含所有弧的有向闭迹,则称
D
D
D 为有向
E
u
l
e
r
Euler
Euler 图,这样的有向闭迹,称为
D
D
D 的有向
E
u
l
e
r
Euler
Euler 闭迹。
有向半Euler图:若有向图
D
D
D 中存在包含所有弧的有向迹,则称
D
D
D 为有向
E
u
l
e
r
Euler
Euler 图,这样的有向迹,称为
D
D
D 的有向
E
u
l
e
r
Euler
Euler 迹。
定理:设
G
G
G 为非空连通有向图,则下面三个命题等价:
算法思想:从任意顶点出发,除非别无选择,否则总是选择一条不是割边的且没走过的边,直到获得
E
u
l
e
r
Euler
Euler 闭迹为止。
定理:设
G
G
G 是
E
u
l
e
r
Euler
Euler 图,
W
=
v
0
e
1
v
1
.
.
.
e
n
v
n
W=v_0e_1v_1...e_nv_n
W=v0e1v1...envn 是
F
l
e
u
r
y
Fleury
Fleury 算法结束时得到的迹,则
W
W
W 一定是图
G
G
G 的
E
u
l
e
r
Euler
Euler 闭迹。
证明:…
例题:16个二进制数应该如何排列,使得圆盘沿顺时针旋转一部分,恰好组成
0000
0000
0000 到
1111
1111
1111 的
16
16
16 组四位二进制输出,同时旋转一周又返回到
0000
0000
0000 状态?
答案:定义一个有
8
8
8 个顶点的有向图
D
D
D,其中顶点用
3
3
3 维
0
−
1
0-1
0−1 序列
x
1
x
2
x
3
x_1x_2x_3
x1x2x3 标记,且顶点
x
1
x
2
x
3
x_1x_2x_3
x1x2x3 与顶点
x
2
x
3
0
,
x
2
x
3
1
x_2x_30,x_2x_31
x2x30,x2x31 以出弧的形式相连,这样得到的有向图
D
D
D 中,每个顶点的入度和出度相等,都等于
2
2
2。然后从
000
000
000 出发,可以得到一个有向
E
u
l
e
r
Euler
Euler 闭迹为 …。注意起终点重复,所以序列取末尾数字,得…
该问题可以扩展,得到的有向图为德布鲁英图
B
(
2
,
n
)
B(2,n)
B(2,n)。每个顶点最后一位数字构成序列为 德布鲁英序列。

管梅谷教授提出并研究了中国邮递员问题。
问题内容:在加权连通图
G
G
G 中,寻找一条经过每条边至少一次且权和最小的闭迹,即
G
G
G 的最优环游。
思考角度:对于重复走的边,可以看作为两点之间的重边(即重复走的边视为
k
k
k 重边)。
最优环游的奇偶点图上作业法:
定理:设
G
G
G 是加权连通图,则奇偶点图上作业法得到的闭途径是最优环游。
证明:…
例题:

答案:图
G
G
G 中有
6
6
6 个奇点
v
2
,
v
3
,
v
5
,
v
8
,
v
10
,
v
11
v_2,v_3,v_5,v_8,v_{10},v_{11}
v2,v3,v5,v8,v10,v11,将它们搭配成三对,因此添加
v
2
v
3
v
4
v
5
,
v
3
v
2
v
1
v
8
,
v
10
v
11
v_2v_3v_4v_5,v_3v_2v_1v_8,v_{10}v_{11}
v2v3v4v5,v3v2v1v8,v10v11。注意
v
2
v
3
v_2v_3
v2v3 间有两条新添加的边,删去得到新图。

v
1
v
2
v
7
v
8
v
1
,
v
3
v
4
v
5
v
6
v
3
v_1v_2v_7v_8v_1,v_3v_4v_5v_6v_3
v1v2v7v8v1,v3v4v5v6v3 中非最优添边,因此重边变单边,单边变重边,再次得到新图:

再检查圈
v
2
v
3
v
6
v
11
v
10
v
7
v
2
v_2v_3v_6v_{11}v_{10}v_7v_2
v2v3v6v11v10v7v2,也非最优,执行单重边置反,得到新图。

检查通过,执行
F
l
e
u
r
y
Fleury
Fleury 算法,得到最优环游为:
v
1
v
2
v
3
v
2
v
7
v
8
v
7
v
6
v
5
v
6
v
11
v
12
v
5
v
4
v
3
v
6
v
11
v
10
v
7
v
10
v
9
v
8
v
1
v_1v_2v_3v_2v_7v_8v_7v_6v_5v_6v_{11}v_{12}v_5v_4v_3v_6v_{11}v_{10}v_7v_{10}v_9v_8v_1
v1v2v3v2v7v8v7v6v5v6v11v12v5v4v3v6v11v10v7v10v9v8v1,环游总长度
109
109
109。