更改一条边的容量后重新计算图中流量的最有效方法

Most efficient way to recompute flow in a graph after changing capacity of one edge

在以下情况下,重新计算图中最大流量的最有效方法是什么:

在第一种情况下,运行 Ford-Fulkerson 算法的一次迭代就足够了吗? 在第二种情况下,只有当边是一组最大流边的一部分时,我们才需要重新计算最大流。 运行 Ford-Fulkerson 的一次迭代是否也足够?

第一种情况,"yes"。这基本上就是 Ford-Fulkerson 的运作方式。想象一下,您是 运行 Ford-Fulkerson 在修改后的图表上从零开始。您可以从 运行 开始,步骤与您在原始图表上所做的完全相同。要真正理解 为什么 它有效,看看最大流量与线性规划的关系可能会有所帮助(参见 http://www.mathcs.emory.edu/~cheung/Courses/323/Syllabus/NetFlow/max-flow-lp.html)。

在第二种情况下,如果你的容量都是整数,答案基本上是"yes"。您要做的第一件事是修改旧的最大流量以满足新的约束。您可以通过沿着您的流程找到一条从源到接收器的路径来实现这一点,该流程经过递减边缘(这并不难做到,只需从递减边缘和 "follow" 流程开始)。然后,为该路径中的每条边从流中减去 1。您现在有一个满足约束的流程,但可能不是最优的。但是,它最多只比最佳流量小 1,因此 Ford-Fulkerson 的一次迭代仍然有效。

在非整数情况下,事情可能会更复杂,在最坏的情况下,您基本上必须重新解决问题。我不熟悉这里最好的算法,但你可以搜索"dynamic max flow"。另见 https://cstheory.stackexchange.com/questions/9938/incremental-maximum-flow-in-dynamic-graphs