最大流


流量守恒:流入a结点的=流出a结点的

1、定义

流网络:G=(V,E),是一个有向图。连通的,对于每个结点 v ∈ V v\in V vV,流网络都包含一条路径 s ~ v ~ t s~v~t svt,且除了源结点外的每个结点都至少有一条进入的边,所以 ∣ E ∣ ≥ ∣ V ∣ − 1 |E|\geq|V|-1 EV1
容量值:图中每条边有一个非负的容量值c(u,v)。
源节点:s
汇点:t
流的形式化定义:
在这里插入图片描述在这里插入图片描述
流的性质:(证明是一个流就要证明这两点)
在这里插入图片描述

容量限制就是说,结点之间的流必须是非负值并且不能超过给定的容量限额。流量守恒是说流入等于流出。
f f f的值 ∣ f ∣ |f| f ∣ f ∣ = ∑ v ∈ V f ( s , v ) − ∑ v ∈ V f ( v − s ) |f|=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v-s) f=vVf(s,v)vVf(vs)。流的值是从源结点流出的减去流入源结点的值。 因为源结点没有流入的边,所以后一项为0。

2、解决最大流问题的Ford_Fulkerson方法

思想:
在这里插入图片描述

1)残存网络

残存网络 G f G_f Gf 由那些仍有空间对流量进行调整的构成。
如果某条边的流量没有小于该边的容量,则可以把这条边置于 G f G_f Gf中,其残存容量为: c f ( u , v ) = c ( u , v ) − f ( u , v ) c_f(u,v)=c(u,v)-f(u,v) cf(u,v)=c(u,v)f(u,v),边的流量等于容量时不属于残存网络。
允许包含G中不存在的边,如要减少 f ( u , v ) f(u,v) f(u,v),可以增加边 f ( v , u ) f(v,u) f(v,u) f ( v , u ) f(v,u) f(v,u)最多能把 f ( u , v ) f(u,v) f(u,v)抵消。这等同于缩减 f ( u , v ) f(u,v) f(u,v)的流量。
残存容量 c f ( u , v ) c_f(u,v) cf(u,v)定义如下:
在这里插入图片描述在这里插入图片描述
这个图表示了增大流的方法,先将(a)写成残存网络的形式,计算方法为式(26.2),然后找增广路径中最小的流量,加到(a)中这条路径上。再找残存网络……直至没有增广路径。
引理:
在这里插入图片描述
证明:
在这里插入图片描述在这里插入图片描述

2)增广路径

增广路径:是残存网络中一条中源结点到汇点的简单路径。
路径p的残存容量 c f ( p ) = min ⁡ c f ( u , v ) : ( u , v ) 属 于 路 径 p c_f(p)=\min{c_f(u,v):(u,v)属于路径p} cf(p)=mincf(u,v):(u,v)p
下述引理和推论证明将流增大 f p f_p fp的量,该流的值会更加接近最大值。
在这里插入图片描述在这里插入图片描述

3)流网络的切割

流网络 G = ( V , E ) G=(V,E) G=(V,E)的切割 ( S , T ) (S,T) (S,T),将结点集合 V V V划分为 S S S T = V − S T=V-S T=VS两个集合,使得 s ∈ S , t ∈ T s\in S,t\in T sS,tT
f f f是一个流,则定义横跨切割 ( S , T ) (S,T) (S,T)的净流量 f ( S , T ) f(S,T) f(S,T)如下: f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ S ∑ v ∈ T f ( v , u ) f(S,T)=\sum_{u\in S}\sum_{v\in T}f(u,v)-\sum_{u\in S}\sum_{v\in T}f(v,u) f(S,T)=uSvTf(u,v)uSvTf(v,u)
切割的容量是: c ( S , T ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(S,T)=\sum_{u\in S}\sum_{v\in T}c(u,v) c(S,T)=uSvTc(u,v)
对于流来说,我们考虑的是从S到T的流量减去从T到S反方向的流量。
而对于容量来说,我们考虑的只是从S出发进入集合T的容量。

在这里插入图片描述
横跨切割的净流量是: f ( v 1 , v 3 ) + f ( v 2 , v 4 ) − f ( v 3 , v 2 ) = 12 + 11 − 4 = 19 f(v_1,v_3)+f(v_2,v_4)-f(v_3,v_2)=12+11-4=19 f(v1,v3)+f(v2,v4)f(v3,v2)=12+114=19
切割的容量: c ( v 1 , v 3 ) + c ( v 2 , v 4 ) = 12 + 14 = 26 c(v_1,v_3)+c(v_2,v_4)=12+14=26 c(v1,v3)+c(v2,v4)=12+14=26

下面的引理表示无论是什么样的切割,通过的净流量都是等于 ∣ f ∣ |f| f,即流的值。
在这里插入图片描述
下面的推论说明:流网络中最大流的值不能超过该网络最小切割的容量。
在这里插入图片描述
接下来的最大流最小切割定理表明:最大流的值实际上就是等于最小切割的容量。
在这里插入图片描述

3、基本的Ford-Fulkerson算法

在这里插入图片描述
复杂度分析:
在这里插入图片描述
一个例子:
在这里插入图片描述
参考:
算法导论第三版

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值