通俗的讲讲求最大流的解法

本文从缘由出发,解释了最大流问题的通俗解法。通过分析题干意思,结合算法导论中的例子,详细阐述了如何解决这类问题,并提供了本题的解题思路。适合面试和笔试备考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缘由

这是阿里实习的一道选择题。我想用比较通俗的方式讲通它,目标就是下次如果出现了类似的求最大流的题,我能够快速的做出答案。所以让我们暂时忘了比较文绉绉的词语。
  1. 这篇博客以非常教科书的方式讲了解法,请参考:浅谈求解最大流的方法
  2. 更为权威您看参考:算法导论 第三版 P414

题干

下图图1中标出了每条有向公路最大流量,请问从S到T最大流量是( ). 
    A.46     B. 47     C. 54      D.77


通俗的解法

题干的意思

看看这个图,问题是问求最大流,其实猜也猜的出来就是从S到T,沿着各个节点传播东西。每个边上有数字,大概权重之类的东西,可以理解为限制,因为毕竟告诉我们要传播东西,又给了我们权重,又问最大 流,显然沿着每个边就不是无限的传播,而且有限的,那么这个数字就肯定就是每个边的所能传播的限制(我个人觉得凭直觉完全感觉得到)。
既然问了,最大流,为什么不就是将指向T的三个边的限制(术语叫容量)加起来不就好了吗?所以答案就是:23+36+18 吗?

但是实际上是不可能的,原因如下图:


如果要通过A点流入T点36,那么A点首先要收36点才能给T啊。但是A点能收到36吗?实际上是收不到的。因为A点总共才流进了19+12,31点。显然是不够的。所以这个问题其实是一种很复杂的问题。


算法导论中例子

因为如果题中给的节点和边比较多,所以我们需要更简单的图来讲清楚解决这个问题的办法。下面图一个求最大流的完整的解法的过程。


a行左边的图是起始,并且已经确定了一条传播路径,为什么选这一条,其实选择哪一条开始是没有关系的,因为会遍历所有的从S到T的路径。那么观察a行左边的图的路径,就会发现最多在这个路径上传播4,这是因为v4-t的限制,所以在a行右图,对这个图作了修改,每一个传播的边都写了4/16,4/12,4/9,4/4。这里的/不是除的意思,以4/16为例,是说在该路径上流过了4,而总容量是16。
到这里我们找到一条流通的路径了,我们将对应的边的箭头反过来,表示该节点已经确定会从被指节点处获得相应的流量,此时,需要注意,该箭头直线也具有传播的功能,而且是其限制就是其数字,因为我们只要少获得了,就相当于逆向传播了。按到这个说法,我们得到了b行作图,并且又随便选了一条传播路径(属于叫增广路径),选好了之后,我发现这条路径最多也只能流通4,这是因为v1到v2的限制。我们再综合之前的情况绘制了b行右图,这是目前我们确定之后的总的流量流动的情况。
我们再将该反的边反过来,形成了C行作图。其实意思都差不多了。也就随便找一条可传播的路径(术语:增广路径)。然后反复重复。

那什么时候是个头呢?你反复找啊找,最后就会发现到了f行作图,如下图,你根本无法找到一条传播路径了,这是因为v3节点已经没有流入了。所以e行右图就是最终结果。


本题解法

如果看懂了书中的例子,那么下图就是就是该题的解答过程。


最终结果在i图,就是 31+15 = 46
注意指向t的18那条边,其实没有流量流过,18表示最大限制。


后记

看懂算法书的上符号也是一种能力。而且是强大的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值