具有不同约束的网络流

时间:2014-05-15 07:19:51

标签: algorithm graph-algorithm

考虑简单的网络流模型:G = (V,E),源节点S和汇聚节点T。对于每个边E[i],其容量为C[i]

然后边缘F[i]上的流E[i]被限制为C[i]0,即F[i]属于{0, C[i]}

如何计算从ST的最大流量?这仍然是网络流量问题吗?

2 个答案:

答案 0 :(得分:1)

修改后的流问题的决策变量是NP完全的,subset sum problem可以归结为它的事实证明:对于给定项w_1,...,w_n和总和W,通过边缘S - >创建连接到每个项目的源S。我的能力w_i。然后通过另一个边缘i - >将每个项目i连接到接收器t。能力w_i。添加边t - >容量为T.如果图中的S-T最大流量为W,则存在累积权重W项目的子集。

也就是说,很可能没有算法可以在每种情况下高效地解决这个问题,但对于没有专门设计为难的实例,你可以尝试integer linear program解决问题并使用一般的ILP求解器来找到解决方案。

如果您的容量是由输入大小中的值多项式限定的整数,那么可能是假多项式算法。

答案 1 :(得分:0)

嗯,不是它不再是一个明确定义的流动问题,因为Heuster给出的原因是,给定通过节点连接的两条边(没有其他连接),流量必须为零,除非两个容量相等。大多数通用流算法都会失败,因为它们无法顺序增加流量。

鉴于这种情况对一般图形的极端限制,我会回到从水槽向后工作的游戏树上。游戏树的大多数节点将快速终止,因为没有流入节点的流组合完全匹配所需的流出。使用合理的启发式,您可以找到合理的搜索顺序并终止树而无需搜索每个分支。

事实上,你可以在开始之前排除大量节点并删除大量边缘,理由是流过某些节点将是非常不可能的。