问题描述
图论中有一类重要的问题就是流量问题。求一个流网络的最大流量。那么可以用的方法有很多,比较经典的是FF(Ford-Fulkerson)算法。本文主要描述FF算法正确性的证明。涉及到的知识点:
- 流网络
- Fold-Fulkerson算法
- 割
- 最大流-最小割定理
其中我们用最大流-最小割定理来证明FF算法的正确性
预备知识
流网络
一个流网络的定义如下:
流网络是一个有向图。具有如下属性:
- 每条边有一个非负的容量值
- 如果 ,那么
- 如果 ,则有
- 不允许有自循环
流网络中有两个重要的顶点,其中s叫做源点(source),t叫做汇点(sink)。流网络中的流是从源地点到汇点。流网络中的所有流都从源点出发,然后最终都流入汇点。
如图就是一个流网络的示意图:
流网络示意图
流
网络G的流是一个如下的一个函数:
流具有如下性质:
-
容量限制:
也就是说,一个流的值是不能大于该流的容量
-
流量守恒:
也就是说,对于任意的非s,非t顶点,从这个顶点流出的流和流入的流是相等的并且如果
流的值
一个流的值用表示
表示从流出的所有值减去流入的所有值
割
定义
我们定义一个流网络的割(cut)为:
其中
就是将一个图分割为两个不相交的集合。s在其中一个集合中,t在另外一个集合中,并且两个集合中的点是不相连的
我们引入一些网络流割的属性:
割的净流量
割的容量
证明
为了证明FF的正确性,我们需要引入一个引理来辅助证明过程
引理1
设为流网络中的一个流,横跨任何切割的净流量都相同,都为,即流的值。即证明
证明引理1:
证明有两种方式,一种是严格的数学证明,另外一种是直观上的感受,如果对于数学证明没有兴趣的话,那么可以直接去看直观上的证明。
数学证明
对于流量守恒特性,我们有: ,
根据流的值的定义:
,将上面的式子针对每一个相加得到
我们可以看到,这个等式前面括号的一部分就是,后面的一部分根据流量守恒知道为0
因此
证毕。
直观证明
根据流的定义,我们知道一个流网络的流的值是所有从流出的流的和,减去所有进入的流。那么从出去的流,最后都会进入到中。而我们任意的一个切割,都将这个网络分成了两个不相连的部分,位于一部分位于一部分。如果流想要从到的话,那么必须经过这个切割。而流网络是没有损耗的,因此经过这个切割的流的值,一定等于从中流出的值和流入值的差,也就是整个网络的流的值。即 证毕。
推论1
有了引理1,我们就可以有推论1:网络的流小于或等于网络任意切割的切割容量,即
证明推论1:
根据引理1,我们知道。网络的流等于任意横跨切割的流,而再根据容量限制我们知道横跨任意切割的流小于等于切割的容量。传递过来,我们就有,网络的流小鱼等于任意切割的容量,即
证毕。
定理1
有了推论1,我们就可以很明显的得出。一个网络的最大流的值等于一个最小切割的容量。即最大流-最小切割定理。
最大流-最小割
设为流网络中的一个流,该流网络的源点为,汇点为,则下面的条件是等价的:
(1) 是的一个最大流
(2) 残存网络不包括任何增广路径
(3) ,其中是流网络的某个切割
我们可以看到,FF算法在可以终止的前提下,终止的条件是(2),我们假设在(2)的前提下有(1),也就是 我们就是需要证明
我们使用反证法来证明。如果一个是最大流,但是中存在增广路径,那么根据FF算法就可以增加网络的流的大小,那么这个流就不是最大流了。与我们最初的假设矛盾,因此是正确的
中不存在增广网络,那么我们就可以将切割为定义,那么显然有。 我们对于会有下面两个推论:
- ;因为,如果那么在中必然有到的通路,那么跟据定义就属于中,与矛盾,因此
- ;因为如果那么显然,如果并且那么在残存网络中就存在一条的路径,那么,这于矛盾。因此
有上面的两个推论,我们结合跨切割的流的定义有:
根据引理1,我们有
因此正确
根据推论1,我们知道,而中的等于前提,即即表明了这是一个最大流。因此是正确的
经过上面的证明我们可以看到,是一个独立的条件,那么就会有这样的证明链条,也就有也就是我们要证明的结论,即FF算法的正确性--在没有残差网络的情况下得到的流一定是最大流。事实上互为充要条件。
证毕。
网友评论