Algorithm 如何将流量过大的预流量推送网络转换为流量网络

Algorithm 如何将流量过大的预流量推送网络转换为流量网络,algorithm,max-flow,push-relabel,Algorithm,Max Flow,Push Relabel,我实现了最大流的最高标签推-再标签算法的第一阶段,但我找不到任何关于如何实现第二阶段的资源,即将预流推送网络转换为有效流网络。如果您确实需要最大流(可以直接从预流导出一个最小切割,并使用它来验证预流),然后我知道两种方法 第一种方法在关于push-relabel算法的原始Goldberg--Tarjan论文中有介绍。本质上,第二阶段的实现几乎与第一阶段完全相同。唯一的区别是源保持在距离n处(而不是接收器,保持在距离0处)。这具有将多余部分路由回源的效果 我不确定第二种方法是在哪里描述的。我知道它

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

如果您确实需要最大流(可以直接从预流导出一个最小切割,并使用它来验证预流),然后我知道两种方法

第一种方法在关于push-relabel算法的原始Goldberg--Tarjan论文中有介绍。本质上,第二阶段的实现几乎与第一阶段完全相同。唯一的区别是源保持在距离n处(而不是接收器,保持在距离0处)。这具有将多余部分路由回源的效果

我不确定第二种方法是在哪里描述的。我知道它在Goldberg的实现中,它是基于(参见
convert\u preflow\u to\u flow
)的

  • 在预流为非循环之前,通过在反向循环中发送足够的流以从流图中删除一个弧来取消流循环

  • 对流程图的节点从sinkmost到sourcemost进行拓扑排序

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


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

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

    第一种方法在关于push-relabel算法的原始Goldberg--Tarjan论文中有介绍。本质上,第二阶段的实现几乎与第一阶段完全相同。唯一的区别是源保持在距离n处(而不是接收器,保持在距离0处)。这具有将多余部分路由回源的效果

    我不确定第二种方法是在哪里描述的。我知道它在Goldberg的实现中,它是基于(参见
    convert\u preflow\u to\u flow
    )的

  • 在预流为非循环之前,通过在反向循环中发送足够的流以从流图中删除一个弧来取消流循环

  • 对流程图的节点从sinkmost到sourcemost进行拓扑排序

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

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