考虑简单的网络流模型:G = (V,E)
,源节点S
和汇聚节点T
。对于每个边E[i]
,其容量为C[i]
。
然后边缘F[i]
上的流E[i]
被限制为C[i]
或0
,即F[i]
属于{0, C[i]}
。
如何计算从S
到T
的最大流量?这仍然是网络流量问题吗?
答案 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)
鉴于这种情况对一般图形的极端限制,我会回到从水槽向后工作的游戏树上。游戏树的大多数节点将快速终止,因为没有流入节点的流组合完全匹配所需的流出。使用合理的启发式,您可以找到合理的搜索顺序并终止树而无需搜索每个分支。
事实上,你可以在开始之前排除大量节点并删除大量边缘,理由是流过某些节点将是非常不可能的。