algorithm - 最大流量 : how to force f units to flow, 容量变化最小?

标签 algorithm graph max-flow

假设我有一个图表并在其上运行最大流。我得到了一些流量,f。但是,我想在 f1>f 的地方流动 f1 个单位。当然,我需要着手增加一些边缘容量。我想尽可能小地增加容量。是否有聪明的算法来实现这一目标?


如果有帮助,我关心我的二分图的应用,其中源 (s) 到左顶点 (L) 具有一些有限的整数容量 (c_l),左顶点 L 到右顶点 R 具有无限连通性容量和所有正确的顶点,R 连接到具有有限整数容量 (c_r) 的汇点顶点。在这里,c_l 和 c_r 总和为相同的数字。此外,左顶点或右顶点之间没有连接。

下图中提供了一个示例。蓝色数字是流量,粉红色数字是最大流量中的实际流量。目前,有 5 个单位在流动,但我想要 9 个单位在流动。

Example max-flow on a bi-partite graph

最佳答案

一般来说,通过将现有弧的成本设置为零并添加新的、无限容量的弧使其成本一加倍,将流实例转变为最小成本流实例。

对于这些特定情况,您要做的最好的事情就是反复找到有限容量的不饱和弧,并沿着包含它的任何路径插入流量。一旦一切都饱和了,就使用任何路径。

这似乎有点太容易成为您想要的,所以我会提到可以制定更复杂的目标并使用线性规划技术来解决它们。

关于algorithm - 最大流量 : how to force f units to flow, 容量变化最小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64310839/

相关文章:

java - 使用广度优先搜索从图中生成树?

algorithm - 构建双数组trie时如何记录节点的子节点?

algorithm - 具有黄色和黑色边缘的最短路径

algorithm - Knuth 的算法 X,用于 block 大小受限的精确覆盖

javascript - 删除在 DFS 算法 cytoscape JS 中发现的边缘

algorithm - Dinic 算法中的层级图代表什么?

algorithm - Ford-Fulkerson 算法在 O(|E|) 迭代内终止,无论查找增广路径的时间复杂度如何

c++ - push-relabel算法的实现

java - 随机生成约束边以生成约束 delaunay 三角剖分

检测给定图像中正方形数量的算法