“Ford–Fulkerson 始终维护满足守恒的可行流,并按完整源汇路增加流值。Push–Relabel允许中间状态违反守恒而形成预流,只沿局部 admissible edge 推送超额;两…”
形式陈述
输入是有限容量网络,输出最大流。算法的中间状态是预流(preflow):容量约束仍成立,除源点外的每个顶点(包括汇点)都要求流入不少于流出。定义超额
高度标签
初始化从零流出发,令其他顶点高度为零,并饱和源的所有非自环出弧;自环可预先删除,因为本问题只优化净流值。超额为正的内部顶点称为 active。若正残量记录
的 push;正向记录增加原弧流量,反向记录减少原弧流量。若 active 顶点
有超额的内部顶点总能沿残量记录回到
没有 active vertex 时,中间点流守恒恢复,预流成为可行流。此时不存在残量
矛盾。由最大流最小割定理,终态流最大。
在邻接表、正反残量配对索引与精确单位成本算术下,维护 active 顶点容器及每点的当前出弧位置;检查失败后推进位置,只有该点 relabel 后才重新扫描其邻接表。这样每个高度阶段只扫描各出记录一次,避免为每次 push 都从头寻找候选。计入初始化,generic push–relabel 的确定性最坏时间为
直觉
算法先把源能推出的流全部推出,再局部搬运积压。高度不是物理海拔,也不必等于到汇的真实距离;它是一份证明标签,保证流只沿恰好下降一层的残量记录推送。某处没有下坡,就提高该点,直到它能把超额送向汇或沿反向记录退回源。
这种局部放电无需先找到完整源汇路。代价是中间状态不再满足普通流守恒,正确性必须同时追踪容量、预流非负超额和高度有效性,不能只凭水流比喻判断操作是否合法。
例子与边界
网络只有
若把初始化预流误当普通流,会错误拒绝这个合法中间状态;若遗漏反向残量记录,过量的
global relabel 可从 gap heuristic 发现某个高度层为空后,可整体抬高无法到汇的一侧。采用这些启发式时,还需规定调用频率,并计入全局搜索与状态重置成本;上面的高度单调操作计数针对基本版本。浮点实现的“正残量”判断可能受舍入影响,组合界按精确算术解释。
推论与应用
Ford–Fulkerson 方法始终维护可行流并沿完整增广路提高流值;Push–Relabel 维护预流并通过局部 push/relabel 消除 active vertex。前者在任意实容量、任意选路下可能不终止,后者的组合操作界与流值、容量分母无关。
费用缩放也有局部Push/Relabel,但价格标签和许可条件不同:许可弧的约化费用为负,阶段允许正负超额,Relabel降低价格并排除自环候选。它需要ε约束、许可图无环和可行比较流的价格降幅证明,不能直接沿用最大流的高度标签论证。
active vertex 的选择规则形成多种实现:FIFO 用普通队列,highest-label 优先放电最高顶点,relabel-to-front 按一次扫描次序调整。它们共享基本正确性,但具体复杂度与工程表现需按策略分别说明。
终止后可在最终残量图中取源可达集构造最小割。中间预流即使源净流出数值已经等于最优值,也可能仍在内部积压超额,不能提前作为可行最大流输出。
参考资料
- Andrew V. Goldberg and Robert E. Tarjan, “A New Approach to the Maximum-Flow Problem,” Journal of the ACM 35(4), 1988, pp. 921–940。
- Ravindra K. Ahuja, Thomas L. Magnanti, and James B. Orlin, Network Flows, Prentice Hall, 1993,Ch. 7。