最大流问题

前言

本文介绍Ford-Fulkerson的三个重要思想:残余网络、增广路径、割,Ford-Fulkerson是一种迭代方法,首先对所有的 u , v ∈ V , f ( u , v ) = 0 u,v\in V,f(u,v)=0 u,vV,f(u,v)=0,即初始状态时流的值为0;每次迭代都在残余网络中找到一条从源点 s s s到汇点 t t t的增广路径,反复进行这一步骤,直到所有的增广路径都被找出。下面具体讲述一下算法流程。

残余网络

残余网络是指给定一个网络和当前流值,其余可以容纳的流组成的网络,我们首先定义每条边的残余容量。具体来说,对于图 G = ( V , E ) G=(V,E) G=(V,E),其源点 s s s,汇点 t t t。设 f f f G G G中对应定点 u u u v v v的一个流。在不超过 C ( u , v ) C(u,v) C(u,v)的条件下( C C C代表最大容量),从 u u u v v v的残余容量定义为: r ( u , v ) = C ( u , v ) − f ( u , v ) r(u,v)=C(u,v)-f(u,v) r(u,v)=C(u,v)f(u,v)
举个例子,若当前边 ( u , v ) (u,v) (u,v)为3/4,即 C ( u , v ) = 4 , f ( u , v ) = 3 C(u,v)=4,f(u,v)=3 C(u,v)=4,f(u,v)=3,那么 r ( u , v ) = 4 − 3 = 1 r(u,v)=4-3=1 r(u,v)=43=1
接下来引入网络流中的一条规律: f ( u , v ) = 3 f(u,v)=3 f(u,v)=3,那么从反方向看,从 v v v u u u就有三个单位的残余网络,即 r ( v , u ) = 3 r(v,u)=3 r(v,u)=3。通俗的来说,从 u u u v v v有三个单位的流量,那么从 v v v u u u就有了将这三个单位流量压回去的能力。如下图例子:
在这里插入图片描述

其对应的残余网络为:
在这里插入图片描述

增广路径

已经一个网络 G G G和流 f f f,增广路径 p p p其实是 G G G的残余网络 G ′ G' G中从 s s s t t t的一条简单路径。直观理解就是一条从 s s s t t t存在一条不违反容量的路径,将这条路径压入流量,可以增加整个网络的流值,例如上图的残余网络总,存在一条如下的增广路径:
在这里插入图片描述

这条增广路径可以压入4个单位的流量,压入后,我们得到一个新的流网络,其流量比原来的流网络要多4个,这时我们继续在新的网络上用同样的方法寻找增广路径,直到找不到为止,这时我们就得到了一个最大的流网络。

最大流最小割定理

以上为Ford-Fulkerson方法,但是怎么证明当无法再寻找到增广路径时,当前网络就是最大流网络呢?这就需要用到最大流最小割定理。
首先介绍割的概念,流网络 G ( V , E ) G(V,E) G(V,E)的割 ( S , T ) (S,T) (S,T)将顶点 V V V划分为 S S S V − S V-S VS两部分,使得源点 s s s属于 S S S,汇点属于 T T T。割 ( S , T ) (S,T) (S,T)的容量是指从集合 S S S T T T的所有有向边的容量之和(注意不含反方向的,必须是 S S S T T T);如果 f f f是一个流,则穿过割 ( S , T ) (S,T) (S,T)的净流量定义为 f ( S , T ) f(S,T) f(S,T)(包括反方向的, S S S T T T为正值,反之为负值)。如下面的一个割:在这里插入图片描述

割的容量为 c ( u , w ) + c ( v , x ) = 26 c(u,w)+c(v,x)=26 c(u,w)+c(v,x)=26;流网络穿过割的净流量为 f ( u , w ) + f ( v , x ) − f ( w , v ) = 19 f(u,w)+f(v,x)-f(w,v)=19 f(u,w)+f(v,x)f(w,v)=19,显然对任意的割,穿过该割的净流量上界就是该割的容量,所以网络的最大流必然无法超过网络的最小割

回到问题本身,残留网络上的增广路径和最小割有什么关系呢?

根据流网络流量守恒的原则,对网络的任意割,其净流量都是相等的。下面再画另一个割:
在这里插入图片描述

在该割中,从源点 s s s到集合 T T T的净流量都流向了 u u u v v v,而在上个割中,集合 S S S T T T的流量等于 u u u v v v到集合 T T T的净流量的。其中, w w w也有流流向了 v v v,而这部分流无法流向源点 s s s,因为没有路径,所以这部分流量加上 s s s u u u v v v的流量,在 u u u v v v之间无论这么传递,最终都要流向集合 T T T,所以这个流向值是等于 s s s流向 u u u v v v的。将 s s s比喻成一个水龙头, u u u v v v为流向别处的水流,都是来自 s s s的,其自身不可能创造水流。综上,任意割的净流量都是相等的。

下面再来证明残余网络 G ′ G' G中,不含增广路径时, f f f G G G的最大流。
假设 G ′ G' G中不包含增广路径,定义 S S S集合为 G ′ G' G s s s能够有通路到达的点的集合,显然这个集合不包括汇点 t t t,因为此时 s s s t t t没有通路,令 T = V − S T=V-S T=VS。显然$(S,T)是一个割,如下图所示:
在这里插入图片描述

那么对于顶点 u ∈ S , v ∈ T u\in S, v\in T uS,vT,有 f ( u , v ) = c ( u , v ) f(u,v)=c(u,v) f(u,v)=c(u,v)。否则 ( u , v ) (u,v) (u,v)存在残余流量,因而 s s s u u u加上 u u u v v v就构成了 s s s v v v的通路,所以 v ∈ S v\in S vS,这与定义矛盾,因而当前流 f f f等于当前割的容量,因此 f f f就是最大流。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值