Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在福特富尔克森之后,仅通过改变一个边缘来增加流量_Algorithm_Graph_Graph Algorithm_Max Flow_Ford Fulkerson - Fatal编程技术网

Algorithm 在福特富尔克森之后,仅通过改变一个边缘来增加流量

Algorithm 在福特富尔克森之后,仅通过改变一个边缘来增加流量,algorithm,graph,graph-algorithm,max-flow,ford-fulkerson,Algorithm,Graph,Graph Algorithm,Max Flow,Ford Fulkerson,假设我在图G=(V,E)上运行了Ford-Fulkerson算法,结果是max-flow-fmax,它与min-cut-Xmin相关联。我感兴趣的是通过增加图中任何一条边的容量来尽可能地增加流量。如何识别此边缘 一种策略可能是:给定初始顶点S和最终顶点T,考虑从S到T的所有路径,并验证较低容量的边。例如,如果我有一条1/1的边,这就是我必须增加容量的顶点 有解决此问题的通用算法吗?一旦在图中找到最大流量,增加边的容量(u,v)只会在残差图中存在从s到u和从v到t的正容量路径时增加最大流量。如果不

假设我在图G=(V,E)上运行了Ford-Fulkerson算法,结果是max-flow-fmax,它与min-cut-Xmin相关联。我感兴趣的是通过增加图中任何一条边的容量来尽可能地增加流量。如何识别此边缘

一种策略可能是:给定初始顶点S和最终顶点T,考虑从S到T的所有路径,并验证较低容量的边。例如,如果我有一条1/1的边,这就是我必须增加容量的顶点


有解决此问题的通用算法吗?

一旦在图中找到最大流量,增加边的容量(u,v)只会在残差图中存在从s到u和从v到t的正容量路径时增加最大流量。如果不是这种情况,那么在增加后的残差图中就不会有增加路径,因此最大流量将保持最大

在具有此属性的边(u,v)中,在增加(u,v)的容量后,可以从s到t推动的最大额外流量将有界。如果你能推动任何气流通过这条边,你必须找到一条从s到u的路径和一条从v到t的路径。这样做时,两条路径中的每一条都会有一个瓶颈边缘,流量的增加不能超过这个。因此,解决问题的一个选项是执行以下操作:

  • 在残差图中找到从s到可从s到达的每个其他节点的最大瓶颈路径
  • 在残差图中找到从每个节点到t的最大瓶颈路径
  • 对于穿过该路径的每条边(u,v),可推动通过该边的最大额外流量由从s到u的最大瓶颈路径和从v到t的最大瓶颈路径中的最小值给出
换句话说,如果可以计算图中的最大瓶颈路径,则可以找到应在时间O(B(m,n)+m)中增加的边,其中B(m,n)是计算图中最大瓶颈路径的成本

幸运的是,这是一个经过充分研究的问题,可以使用Dijkstra算法的一种变体来解决,该算法不存储到每个节点的最小成本路径,而是存储到每个节点的最大瓶颈路径。快速的谷歌搜索应该会发现一些关于这方面的额外信息。使用Fibonacci堆,您可以在时间O(m+n log n)内实现此搜索,因此用于标识应增加容量的边缘的总体运行时间也应为O(m+n log n)


希望这有帮助

很好的解释,不过有一个问题。是否有可能在时间O(k*| E |)内计算新容量的最大流量,其中k是我们使用增强算法增加边缘容量的量?我不清楚,你能告诉我我是对还是错吗?还有一件事,流量增加的最大量是多少?