Ford-Fulkerson算法正确性证明

问题描述

图论中有一类重要的问题就是流量问题。求一个流网络的最大流量。那么可以用的方法有很多,比较经典的是FF(Ford-Fulkerson)算法。本文主要描述FF算法正确性的证明。涉及到的知识点:

  1. 流网络
  2. Fold-Fulkerson算法
  3. 最大流-最小割定理

其中我们用最大流-最小割定理来证明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算法的正确性--在没有残差网络的情况下得到的流一定是最大流。事实上互为充要条件。

证毕。

你可能感兴趣的:(Ford-Fulkerson算法正确性证明)