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

时间:2016-06-14 12:59:25

标签: algorithm graph ford-fulkerson

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

  • 我们将一条边上的流量增加一个
  • 我们减少一条边上的流量

在第一种情况下,是否足以运行一次Ford-Fulkerson算法的迭代? 在第二种情况下,只有当边缘是最大流量的一组边缘的一部分时,我们才需要重新计算最大流量。是否足以运行福特 - 富尔克森的一次迭代?

1 个答案:

答案 0 :(得分:1)

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

在第二种情况下,答案基本上是"是"如果你的能力都是整数。您要做的第一件事是修改旧的最大流量以满足新约束。你可以通过基本上找到沿着流经过递减边缘的源从源到接收器的路径来做到这一点(这不难做到,只需从递减的边缘开始并且"遵循"流程)。然后,从该流中为该路径中的每条边减去1。您现在有一个满足约束的流程,但可能不是最理想的。然而,它最多只比最佳流量少1,所以福特 - 富克森的一次迭代也会起作用。

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