当前位置: 代码迷 >> 综合 >> Ford-Fulkerson算法的缺陷
  详细解决方案

Ford-Fulkerson算法的缺陷

热度:101   发布时间:2023-11-21 07:33:09.0

分析Ford-Fulkerson时间复杂度

假设:每个边容量c(e)c(e)c(e)[1,C][1,C][1,C]的整数

  • Ford-Fulkerson结束时,最大流val(f?)≤(n?1)C≤nCval(f^*)\leq (n-1)C\leq nCval(f?)(n?1)CnC。(最大值在只有一个宿点,其余全是源点且链路容量均为最大值CCC的情况下出现)
  • 每次增广,流值大小至少增加1,因为链路瓶颈最小为1
  • 用BFS或者DFS寻找一条增广路径的时间复杂度为O(n+m),一般边数大于顶点数,取O(m)
  • 因此最多nCnCnC步增广操作,就能达到最大流,总体时间复杂度为O(mnC)O(mnC)O(mnC),由于容量CCC是按照位存储的,因此该算法仍是一个伪多项式算法。

Ford-Fulkerson算法不能快速收敛例子

在这里插入图片描述
最坏情况每次流值只增加1,最大流值为2C2C2C,因此最多需要2C2C2C次增广才能得到最大流

不能使用Ford-Fulkerson算法的情况

由于Ford-Fulkerson的前提假设为每个边容量c(e)c(e)c(e)是整数,因此边容量是整数是适用的。又有理数可以通过扩大倍数转化为整数,因此Ford-Fulkerson总体对有理数的适用的。下面证明存在不适用的无理数特例:

流网络构造如下:
在这里插入图片描述
其中CCC是一个足够大的容量,rrr为无理数,满足下列式子:
在这里插入图片描述
按照如下方式模式循环
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模式观察:
在这里插入图片描述
最终会收敛到一个不是最大流的流
在这里插入图片描述
然而最大流值实际为2C+12C+12C+1