最大流 (Maximum Flow) 之 Ford-Fulkerson

最大流(Maximum Flow)

接上一篇算法笔记(Chapter26)———最大流(Maximum Flow)之流网络和流
一个菜🐔倔强的取经之路。
为了知识的严谨性,本文相关的定义是按照算法导论(第三版) copy and paste。我的理解和总结会适当的添加在这些定义后面用来帮助大家理解。我认为一些重要东西都已经加粗高光标记了。本文算是对这一块内容的学习总结,如有错误欢迎大家指正,交流。

2.Ford-Fulkerson方法

我们称其为"方法"而不是"算法",是因为它包含了几种运行时间各不相同的具体实现。Ford-Fulkerson方法依赖于三种重要思想,它们与许多的流算法有关: 残存网络(Residual networks)增广路径(Augmenting paths)割(Cut)

Ford-Fulkerson方法循环增加流的值,在开始的时候,对于所有的结点 u , v ∈ V u,v \in V u,vV, f ( u , v ) = 0 f(u,v)=0 f(u,v)=0,给出的初始流量值为0。在每一次迭代中,我们将图 G G G 的流的值( ∣ f ∣ |f| f )进行增加,方法就是在一个关联的 “残存网络” G f G_f Gf 中寻找一条 “增广路径”。一旦知道图 G f G_f Gf 中一条增广路径的边,就可以很容易辨别出 G G G 中的一些具体的边,我们可以对这些边上的流量进行修改,从而增加流的值。虽然Ford-Fulkerson方法的每次迭代都增加流的值,但是对于图 G G G 的一条特定边来说,其流量值可能增加,也可能减少,对某些边的流量值进行缩减是必要的,以便让算法可以将更多的流从源结点发送到汇点。重复对流进行这一过程直到残存网络中不再存在增广路径为止最大流最小割定理(Max-flow min-cut) 将证明该过程终结时,将获得一个最大流。

残存网络(Residual networks)

给定流网络 G G G 和流量 f f f,残存网络 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)。如果边 ( u , v ) (u,v) (u,v) 的流量等于其容量,则其 c f ( u , v ) = 0 c_f(u,v)=0 cf(u,v)=0,该条边不属于图 G f G_f Gf

残存网络 G f G_f Gf 还可能包含图 G G G 中不存在的边。该方法对流量进行操作的目标是增加总流量(也就是流的值),为此,可能对某些特定边上的流量进行缩减。为了表示对一个正流量 f ( u , v ) f(u,v) f(u,v) 的缩减,我们将边 ( v , u ) (v,u) (v,u) 加入到图 G f G_f Gf 中,并将其残存容量设置为 c f ( v , u ) = f ( u , v ) c_f(v,u)=f(u,v) cf(v,u)=f(u,v)。也就是说一条边所能允许的反向流量最多将其正向流量抵消。残存网络中的这些反向边允许将已经发送出来的流量发送回去。而将流量从同一条边发送回去等同于缩减这条边的流量。

残存容量(Residual capacity)

假设我们有一个流网络 G

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值