推重新算法的分析

时间:2012-07-11 06:20:43

标签: algorithm graph clrs max-flow

我正在阅读Cormen等算法导论中的推流算法。

我在理解引理26.20时遇到困难,如下所述:

  

设G =(V,E)为源s和汇t的流网络,设f   在G中是一个预流。然后,对于任何溢出的顶点u,有一个   残留网络中从u到s的简单路径。

要查看此leema的上下文,请访问以下链接。

http://integrator-crimea.com/ddu0164.html

请求您的帮助以便理解这一点。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

我看了所有这些最大流量的东西已经有一段时间了,但如果我正确地考虑这一点,这就是26.20所说的引理。

显然,有一条路径来自s - >你因为你有多余的。要考虑的引理的重要部分是它指出了一条简单的路径来自u - > s是原始流动的相反方向,导致u溢出(因为流动起源于s并行进到u)。由于u中存在溢出,因此s - >中存在一条简单的路径。 u在整个路径上至少有1个流量单位。即使c(a,b)= 1且f(a,b)= 1使得c(a,b)= 0,其中a和b是该简单路径中的所有顶点对,则c(b,a) = c(b,a)-f(b,a)= 1 - (-1)= 2因为f(a,b)= -f(b,a)。因此,你可以在达到该方向的容量之前将2个单元推回到该边缘(1对应已经流动的1使得流过该边缘0,并且另一个使得流过该边缘1)。

你知道这是一条简单的道路的原因是因为如果没有来自s的简单路径 - >你根本没有任何流动。这是因为即使有非简单的方法从s到达你,也必须至少有一种简单的方法,否则所有的流都将被捕获在非简单路径中,这意味着没有人会通过你。

想象一下。绘制流图,其中源完全循环通过几个节点。是否有可能在没有简单的剩余路径回到s的情况下击中你(选择一个节点)?现在尝试制作一个在多个边缘都有最大流量的流量都指向你的流量。现在尝试找回一条简单的路径。这可能证明了26.20所说的引理。其中一些外表很难理解,但一旦你真正想到它,它通常会有意义。他们只是通过矛盾来证明这是正式证明他们所说的最佳方式。另外,查看维基页面,它总是有一些很好的见解! http://en.wikipedia.org/wiki/Push-relabel_maximum_flow_algorithm

希望这样做有道理,如果它不让我知道,我愿意和你合作!