最大流量算法运行时间

时间:2018-12-18 11:35:01

标签: algorithm time-complexity max-flow ford-fulkerson

我有以下两个问题。

  1. 是非题:我们总是可以在Ford-Fulkerson算法中找到一系列增加流量的s-t路径,这样我们就可以在多项式迭代中达到最大流量。
  2. 是非题:我们总是可以在Ford-Fulkerson算法中找到一系列增加流量的s-t路径,这样,只有经过指数级的迭代后,我们才能达到最大流量。

2 个答案:

答案 0 :(得分:1)

第一个答案肯定是错误。由于Ford-Fulkerson算法的运行时间不是多项式-它是指数的。

因此,要找到所有s-t路径以达到最大流量,将花费指数时间。

Ford-Fulkerson算法的运行时间为O(nV),更准确地说是O((n+m)V),其中n是节点数,m是其中的边数图。 V是图形具有的最大容量。

因此,它可能看起来像多项式时间算法。但是,如果V很大,让我们假设这个大数可以表示为2^k,则运行时间变为O(n. 2^k)-是指数的。

第二个答案在某些情况下也不是正确的,但在考虑图形中容量值的整数/有理数时,大多数情况下是正确的。我们知道该算法需要花费指数时间-没问题。但是,如果图表的容量值为 inrational ,则Ford-Fulkerson算法不能保证终止。因此,第二条陈述也是错误的。但是,在大多数情况下都是如此,因为在大多数情况下,容量是整数或有理值。

答案 1 :(得分:0)

第一个主张是正确的。第二个说法是错误的。

G_f表示G残留网络,c_f是G_f中的容量。 据我所知,这是福特富里克森方法:

1) Define: f(u,v) = 0, for all (u,v) in E.

2) while there exits a path p from s to t, in G_f:

    3)     c_f(p) = min{c_f(e) : for all e in p}

    4)     for (u,v) in p:

        5)         if (u,v) in E:

            6)             f(u,v) += c_f(p)

        7)         else:

            8)             f(u,v) -= c_f(p)

到过程结束时,f是最大流量。 (您可以在CLRS的“算法简介”中阅读证明)

该算法的运行时间为O(X(V + E)),X是while循环迭代的次数。

现在-我们可以使用BFS搜索在第(2)行上找到p。这种方法可确保我们迭代while循环O(VE)次。此实现也称为Edmonds-Karp algorithm。因此,总运行时间为:O(VE *(E + V))。

这应该回答您的第一个问题-我们总是可以通过在多项式时间内增加路径s-t来找到最大流量。

关于第二个问题: 考虑一个图G,其中所有容量均为1。显然,最大流量值小于| E |。

由于while循环的每次迭代都将流f的当前值增加一个正整数(实际上是一个整数。如果需要证明,请转到CLRS),我们得到while循环最多迭代| E |。次。因此,无论我们如何选择增广路径,我们的运行时间均为O(E *(E + V)。 该图与第二项主张相抵触。