检查某些边缘是否穿过一些最小切口

时间:2016-09-18 18:24:48

标签: algorithm computer-science graph-algorithm

我正在努力解决以下问题(实际上是解决方案):

  

给定and again access memory after,流网络(容量是整数),我们用G(V,E)表示最大流量。如果出现以下情况,请检查边f*
   它穿过一些最小的切割    它穿过每一个最小的切口。

解决方案建议:

  1. 通过e减少边e的容量,并检查新的最大流量是否等于1。如果是这样,返回true。
  2. 通过f*-1增加边e的容量,如果max-flow增加,则返回true。
  3. 如果你能向我解释这个算法背后的想法,我会很高兴的。

    谢谢

1 个答案:

答案 0 :(得分:1)

来自wikipedia

  

最大流量最小切割定理表明,在流动网络中,从源到水槽的最大流量等于最小切口中边缘的总重量,即最小总重量如果移除边缘会将源与接收器断开连接。

  1. 如果e跨越最小切割,则意味着它是一组边缘之一(让我们称之为c_group):

    A)如果从图表中删除,则源和接收器将不再连接(它们之间没有路径)

    和B)它们的权重之和(让它称之为c_sum)是最小的(没有一组边满足(A)并且总和较小)。

    当我们将e的权重减少1时,从(A)我们知道c_group是一个剪切,而从(B)我们现在认为c_sum是图表中的最小切割值(其边缘和权重之和)现在c_group的值当然是c_sum-1,因为e位于{{1}我们减轻了c_group的重量。所以我们知道1是图表中新的最小切割值(即使c_sum-1属于其他切割,它只能在切割中出现一次,因此其重量减少意味着每次切割它属于减少e,所以最小割值不能超过1)。根据最大流量最小割理论,我们知道新的最小割值意味着新的最大流量值是相同的(1)。

    另一方面,如果c_sum-1没有穿过最小切口,那么它所穿过的每个切口都不是最小的,这意味着组'权重' sum大于最小割值。因为我们只有整数值权重,这意味着它们比最小值都大至少e,所以当我们将1减少e时,每次切割它会减少到变化前的最小切割值或更高的值,意味着最小值不会因减少而改变,并且最大流量最小切割定理意味着最大流量没有改变。

    现在我们知道,如果我们将1的值减少e,我们可以检查最大流量值以及是否更改(减少1 )这必须意味着1确实穿过最小切割。

  2. 我会在这里详细介绍,但如果你还在努力评论,我也会扩展它:

    当我们增加e的值时(这里它并不重要)它会改变图中切割的最小值,如果它是每个最小切割的一部分在图中。很明显,它增加了它所属的每个组的总和,并且如果有一组边构成最小割((1)中的条件(A)+(B)){{1} }不属于那么增加它的重量不会改变那个组的权重'总和因此不会改变图中切割的最小值。根据最大流量最小切割定理,如果e是图中每个最小切割的一部分,则图中的最大流量增加。

  3. 注意:我在这个答案中交替使用我的语言,将边缘组视为切割并将切割视为边缘交叉的虚线。这种混淆来自问题引用问题的不相容语言和引用我的答案的引用定理。如果它让任何人感到困惑,我很抱歉。基本上是" cut"在这个答案中都提到了它们。