算法导论 24.3 Exercises 答案

24.3-1

接下里将使用残余网络来表示这个流网络,并且由于边容量都是 1,因此忽略容量标记值。一开始残余网络如下:

随后运行 BFS,找到了一条增广路径 (s,1,6,t)。由此可以对残余网络进行更新:

随后找到了一条增广路径 (s,2,8,t)。由此可以对残余网络进行更新:

最后找到了一条增广路径 (s,3,7,t),由此可以对残余网络进行更新:

此后,再也不存在增广路径,因此最大流 |f|=3。,从而得到最大匹配 |M|=3

24.3-2

考虑算法 FORD-FULKERSON 的第 3 行的 while 循环,定义循环不变量:对于 (u,v)E,cf(u,v) (u,v).f 总是为整数。接下来证明这个循环变量成立。

初始化:一开始,所有的流 f 都为 0,由于容量只取整数值,因此所有容量 cf(u,v) 都是整数,循环不变量得以成立。

保持:假设循环执行前,循环不变量保持成立,此时找到了一条增广路径 p。由于 (u,v)E,cf(u,v) 都是整数,因此从第 4 行计算出来的 cf(p) 是整数。由于对于所有边 (u,v) f 属性都是整数,因此对 (u,v).f 都减去一个整数 cf(p),仍然是整数。按照方程 24.2 更新残余网络的每条边的容量 cf,得到的仍然是整数。

终止:最终 while 循环停止后,所有边上的流 f 和残余容量 cf 都是整数。

因此,最终计算出来的最大流的值 |f| 一定是一个整数。

24.3-3

这条增广路径的最大值为:2min{|L|,|R|}+1。令 m=min{|L|,|R|}。接下来介绍如何构造达到这个上界的增广路径。

首先构造出图 G=(V,E)。从 L 中取出 m 个节点,不失一般性,设其为 l1,l2,,lm,从 R 中也取出 m 个节点,设其为 r1,r2,,rm。那么 i[1,m],(li,ri)E;j[1,m1],(lj,rj+1)E。对于其它节点 uV{l1,l2,,lm,r1,r2,,rm},只需要保证它们在另一部分的节点和 u 相连即可。最终如此构造出图 G

在前 m1 轮迭代中,假设算法 FORD-FULKERSON 在第 i 轮的增广路径是 sliri+1t,那么这 m1 轮后,残余网络 Gf 包含了如下这些边:{(ri+1,li)i[1,m1]},那么第 m 轮所构造的增广路径 p 可以如下构造:slmrmlm1rm1r2l1r1t

可见,上述所构造的增广路径 p 达到了长度 2m+1=2min{|L|,|R|}+1。由于增广路径 p 是一条简单路径,L,R 中总有一部分节点已经被使用完了,无法再找到一对节点 (l,r) 再延长路径长度,因此只能走向节点 t。最终,p 是所求满足条件的最长路径。