在具有下限的网络中寻找流通

时间:2016-11-22 22:09:31

标签: algorithm max-flow network-flow

我无法理解如何在网络中找到具有下限(不是需求)的循环流。我发现了下一个带有问题描述和解决策略的文档:

  1. https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/flowext.pdf
  2. http://homes.cs.washington.edu/~anderson/iucee/Slides_421_06/Lecture24_25_26.pdf
  3. http://web.engr.illinois.edu/~jeffe/teaching/algorithms/2009/notes/18-maxflowext.pdf
  4. 让我们考虑一个具有以下边缘的网络(l - 下限,c - 容量):

    1 - > 2:l = 1 c = 3

    2 - > 3:l = 2 c = 4

    3 - > 1:l = 1 c = 2

    据我所知解决问题,我们应该采取下一步措施:

    1. 将这个问题转化为需求问题的循环"。这可以通过下一个公式dv' = dv - (Lin - Lout),其中' dv'是原始顶点需求(在我们的例子中,它等于零),' Lin' - 顶点输入边缘下限的总和,以及' Lout' - 顶点输出边缘下限的总和。
    2. 将边缘容量更新为c' = c - l
    3. 将带有边的源顶点S添加到每个顶点,其中dv< 0具有容量' -dv'
    4. 使用dv>添加具有来自每个顶点的边的接收器顶点T. 0具有容量' dv'
    5. 使用任何算法在新网络中查找max-flow,例如Edmonds-Karp算法。
    6. 如果最大流量的值等于连接到T的顶点的所有需求的总和,则网络中存在循环。
    7. 执行这些步骤后,新网络将是:

      S - > 2:c = 1

      2 - > 3:c = 2

      3 - > T:c = 1

      1 - > 2:c = 2

      3 - > 1:c = 1

      对顶点的要求:

      d1 = 0

      d2 = -1

      d3 = 1

      我们看到最大流量等于1,并且等于T的边缘之和也是1.并且它覆盖边缘A-> 2-> 3-> T。

      问题是如何让原始网络中的流通以原始边界流动?

      存在原始网络中的循环流 - 我们只需将流量等于2分配给所有边缘。

1 个答案:

答案 0 :(得分:0)

有点晚了,但在为这个问题找到解决方案时,我偶然发现了这个问题。

如果你这样做,那就是:

  1. 您问题中的步骤1和2。
  2. 使用dv>将带有边的顶点S添加到每个顶点0,容量'dv'
  3. 添加带有来自每个顶点的边的顶点T,其中dv< 0容量 '-dv'
  4. 在此之后,任何最大流算法找到的解决方案将是:

    • S-> 3:c = 1
    • 3-> 1:c = 1
    • 1-> 2:c = 1
    • 2-> T:c = 1

    In image form

    您现在需要做的只是将下限值添加到前面步骤的结果中。在这种情况下:

    • 1-> 2:c = 1,l = 1,c + 1 = 2
    • 2-> 3:c = 0,l = 2,c + 1 = 2
    • 3-> 1:c = 1,l = 1,c + 1 = 2

    你有你想要的答案。我希望这有助于某人。