上一节我们讲到了退化圈方向搜索算法,它能得到全局最优解。然而算法运行过程中需要选择一个可行改进圈方向,对于一个大型网络流来说,这并非容易的。我们需要找到在每次循环中确认可行改进圈方向或者证明不存在的方法。我们现在就来探讨这个问题
传送门:网络流与图(一)
1
最优流消圈算法
首先,我们需要定义残留有向图(residual digraph):
举个例子,对于下面弧上数字表示费用、容量和流量的网络图,构建的残留有向图为:
残留有向图构建的意义在于可以确认可行改进圈方向,只需要满足:
这样,我们只需要确定残留有向图是否存在负回路就能判断可行改进圈方向。回忆一下,在最短路径规划章节里,我们提到弗洛伊德-瓦尔肖算法也可用于检验网络流中是否存在负回路。
将弗洛伊德-瓦尔肖算法应用于当前可行流对应的残留有向图:可能会得到一条负回路,即说明原始图中对应圈的方向可行改进;也可能会完成一次最短路计算,即证明可行改进圈方向不存。
对上面例子应用弗洛伊德-瓦尔肖算法,直接执行代码得到结果:
传送门:最短路与动态规划(二)