福特-福克森算法和最大流最小割定理

时间:2018-12-02 12:32:12

标签: algorithm graph-theory ford-fulkerson

嗨,我在用max-flow min-cut Theorem研究Ford-Fulkerson算法时遇到了麻烦。

根据该定理,最大流量应与要切割的边缘的总重量相同。

但是,观看视频https://www.youtube.com/watch?v=Tl90tNtKvxs会让我感到困惑。讲师说,根据福特-福克森算法,最大流量为19,但是我找不到以19为代价的削减。

2 个答案:

答案 0 :(得分:2)

切口表示您在源极和漏极之间定义了切口。该切口不必是直线,曲线或任何其他形状就可以。

例如,在这里我选择了 blue 切割,以使边缘 AB AD CD 都通过那个切口。现在,如果我们看一下这些边的分配流,并对它们进行求和,就得出 4 + 6 + 9 = 19

另一种选择是绿色。在这里,我们有 BT AD AC 沿“向前”移动的边缘,以及有 DC 沿移动“向后”。因此,流量的总和为 9 + 6 + 9-5 = 19 。因此,无论我们采取什么削减措施,总和始终为19(当然,我们需要进行适当的簿记,并从相反的方向减去流量)。

当然,您可以选择任何所需的剪切(例如,紧接在源之后或流失之前的剪切),如果算法正确完成,则所有这些剪切的总和始终为19。这是合乎逻辑的,因为如果一个剪切的流量将大于(或小于)19,则存在一个剪切的存在会“推进”一个流量为19的节点,这意味着该节点中的流量已经消失或出现。

但是它认为,如果您要遍历所有可能的削减,那么最小削减就是使容量总和最大化的削减。因此,严格来说,我们可以遍历所有可能的削减,并每次跟踪容量之和,最后选择流量最小的那个。天真的方法,如果只是简单地迭代所有切割,则会产生 O(2 n 算法,与 Ford–Fulkerson算法相比 em>,当然是不可取的。

two cuts at the end of the algorithm

答案 1 :(得分:2)

您对最大流最小割定理的解释没错。

最小切割集由边缘SA和CD组成,总容量为19。

要进行削减并计算成本,您可以:

  1. 将所有顶点分为S和D两套,以使源极位于S端,漏极位于D端。
  2. 从S顶点到D顶点剪切所有边缘。请注意,您无需剪切从D到S的边缘。
  3. 加总裁切边缘的容量。

对于上面的最小值,S包含顶点s和c,而D包含其余顶点。