【问题标题】:How To Convert A Pre-Flow Push Network With Excess Flow To A Flow Network如何将流量过多的预流推送网络转换为流网络
【发布时间】:2015-01-11 13:27:57
【问题描述】:

我为最大流量实现了最高标签推送重标记算法的第一阶段,但我找不到任何有关如何实现第二阶段的资源,即将预流推送网络转换为有效的流量网络。

【问题讨论】:

    标签: algorithm max-flow push-relabel


    【解决方案1】:

    如果您确实需要最大流量(可以直接从预流中导出最小切并使用它来验证预流),那么我知道两种方法。

    第一种方法在原始的 Goldberg--Tarjan 论文中介绍了推送重新标记算法。实质上,第二阶段的实施几乎与第一阶段完全相同。唯一的区别是源保持在距离 n 处(而不是接收器,距离为 0)。这具有将多余的路由回源的效果。

    我不确定在哪里描述了第二种方法。我知道这是在 Goldberg 的实现中,Boost Graph implementation 是基于它的(参见convert_preflow_to_flow)。从概念上讲,分为三个步骤。

    1. 在预流为非循环之前,通过在反向循环中发送足够的流来取消流循环,以从流图中移除其中一条弧。

    2. 对流图的节点进行拓扑排序,从 sinkmost 到 sourcemost。

    3. 对于拓扑顺序中的每个节点,通过减少传入弧上的流量来消除其多余部分(这会导致尚未处理的多余节点相应增加)。

    实际上,第 1 步和第 2 步都涉及深度优先搜索。天真地,在检测到并取消每个循环后,人们会重新启动深度优先搜索以进行循环检测,但是可以将深度优先搜索倒回到它第一次使用取消删除的弧的位置,从而节省时间在搜索中再次到达该点。拓扑顺序可以作为搜索的副产品获得,为步骤 2 保存单独的遍历。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多