最大流算法的修改

时间:2014-01-21 20:37:59

标签: algorithm max-flow network-flow

我试图解决有关maximum-flow problem的问题。我有一个源和两个接收器。我需要在这个网络中找到最大流量。这部分是一般的最大流量。但是,在这个特殊版本的max-flow问题中,两个目标必须获得相同的流量。

有没有人可以帮助我,我该怎么办呢?

1 个答案:

答案 0 :(得分:7)

s成为您的源顶点,t1t2成为两个接收器。

您可以使用以下算法:

  1. 使用带有两个接收器的常规最大流量,例如通过具有无限容量的边缘将t1t2连接到超级接收器。您现在拥有最大excess(t1) + excess(t2)的解决方案,但它可能不平衡。

  2. 如果excess(t1) == excess(t2),您就完成了。否则,w.l.o.g。让excess(t1) > excess(t2)

  3. 在源步骤1的剩余网络中运行带有源t1的另一轮最大流量并接收t2。限制从t1c = floor((excess(t1) - excess(t2)) / 2)传出的流量},例如,通过具有给定容量S的边缘引入连接到t1的超级源c。现在,excess(t2)是您可以发送到两个接收器的最大流量。

  4. 如果您需要重建每条边的流量值,请执行另一轮max-flow将excess(t1) - excess(t2)剩余流量单位传输回源。

  5. 复杂性是你的max-flow算法的复杂性。

    如果您已经知道如何使用下限容量来解决max-flow,您还可以对解法进行二进制搜索,从而导致复杂性O(log W * f),其中W是解决方案值,{{1}是最大流量复杂度。