【问题标题】:Edmonds-Karp Algorithm for a graph which has nodes with flow capacitiesEdmonds-Karp 算法,用于具有具有流量的节点的图
【发布时间】:2012-02-03 19:09:36
【问题描述】:

我正在为有向图实现此算法。但是这个图节点的有趣之处也有它们自己的流量能力。我认为,必须以特殊的方式处理原始问题的这种细微变化。因为,在原始的最大流问题中,从头到尾找到任何路径都是可以的(实际上,在 Edmonds-Karp 算法中,我们需要做 BFS,并选择到达最终节点的第一条路径)但是有了这个节点-容量扩展,我们需要更加小心“这条路径选择”的工作。我知道是因为,我实现了 original-algorithm,发现自己的流量值比 max-flow 小,我怀疑这与节点容量限制有关。

我为此付出了很多努力,并提出了一些想法,例如通过添加自循环将初始图转换为对节点没有容量限制的图(将自循环添加到每个节点并找到包含此自循环的路径)路径上每个节点的循环)或添加权重取代初始节点容量约束的虚拟节点和边)但是,我不相信这些都是解决这个问题的好方法。

任何想法将不胜感激。

提前致谢。

【问题讨论】:

    标签: algorithm graph edmonds-karp


    【解决方案1】:

    将节点容量的最大流量问题简单地简化为常规的最大流量问题:

    对于图中的每个顶点v,替换为两个顶点v_inv_out。到v 的每个传入边都应该指向v_in,而来自v 的每个传出边都应该指向v_out。然后再创建一条从v_inv_out 的边,容量为c_v,顶点容量为v

    因此,您只需在转换后的图上运行 Edmunds-Karp。

    假设您的问题中有以下图表(顶点 v 的容量为 2):

    s --> v --> t
       1  2  1
    

    这将对应于最大流问题中的这张图:

    s --> v_in --> v_out --> t
       1        2         1
    

    很明显,得到的最大流量就是解(而且证明也不是特别困难)。

    【讨论】:

    • 我知道这与我最初的问题没有太大关系,但我很想知道在使用 Edmonds-Karp 算法之前我们处理图中的循环是否存在这样的减少。因为如果处理不当,循环会以某种方式改变最大流量。我认为,它可以像你提到的那样减少。我们可以有一个顶点对,比如cycle_in和cycle_out,而不是那个循环中的所有顶点,我们可以用来自cycle_in和cycle_out的具有相同容量的边替换循环中顶点的每个传入和传出边。可以吗?
    • 我忘了告诉(cycle_in,cycle_out)边缘的容量。它必须是所有旧边缘和节点容量中的最小值。但是,我有一种直觉,对于循环图的最大流量问题,这是一个错误的构造。
    猜你喜欢
    • 2012-11-20
    • 2011-07-19
    • 2020-08-03
    • 1970-01-01
    • 2018-08-09
    • 2023-01-04
    • 1970-01-01
    • 2021-06-29
    • 2021-01-08
    相关资源
    最近更新 更多