“Ford–Fulkerson 始终维护满足守恒的可行流,并按完整源汇路增加流值。Push–Relabel允许中间状态违反守恒而形成预流,只沿局部 admissible edge 推送超额;两…”
形式陈述 ​
输入是有限容量网络,输出最大流。算法的中间状态是预流(preflow):容量约束仍成立,但内部顶点只要求流入不少于流出。定义超额
高度标签
初始化令其他顶点高度为零,并饱和源的所有出弧。超额为正的内部顶点称为 active。若正残量记录
的 push;正向记录增加原弧流量,反向记录减少原弧流量。若 active 顶点
有超额的顶点总能沿既有流的反向残量记录最终回到
没有 active vertex 时,中间点流守恒恢复,预流成为可行流。此时不存在残量
矛盾。由最大流最小割定理,终态流最大。
在邻接表、正反残量配对索引与精确单位成本算术下,generic push–relabel 的确定性最坏时间为
直觉
算法先把源能推出的流全部推出,再局部搬运积压。高度不是物理海拔,也不必等于到汇的真实距离;它是一份证明标签,保证流只沿恰好下降一层的残量记录推送。某处没有下坡,就提高该点,直到它能把超额送向汇或沿反向记录退回源。
这种局部放电无需先找到完整源汇路。代价是中间状态不再满足普通流守恒,正确性必须同时追踪容量、预流非负超额和高度有效性,不能只凭水流比喻判断操作是否合法。
例子与边界
网络只有
若把初始化预流误当普通流,会错误拒绝这个合法中间状态;若遗漏反向残量记录,过量的
global relabel 可从 gap heuristic 发现某个高度层为空后,可整体抬高无法到汇的一侧。它们保持基本不变量并改善实践性能,但不属于算法定义。浮点实现的“正残量”判断可能受舍入影响,组合界按精确算术解释。
推论与应用
Ford–Fulkerson 方法始终维护可行流并沿完整增广路提高流值;Push–Relabel 维护预流并通过局部 push/relabel 消除 active vertex。前者在任意实容量、任意选路下可能不终止,后者的组合操作界与流值、容量分母无关。
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。