Table of Contents
埃德蒙兹-卡尔普算法:详细的效率分析
Edmonds-Karp算法是福特-福尔克森方法在流网中计算最大流量的具体实施方法. 虽然最初的福特-福尔克森方法使用任意搜索增强路径(这会导致病理病例中的指数时间),但Edmonds-Karp执行基于BFS的搜索,确保每个周期选择最短的增强路径(以边数计),这个保证产生一个定义明确的多名运行时间,并使算法成为引入网络流量理论的基石.
算法描述和密钥属性
鉴于一个有定向图G = (V, )],并带有源s ,沉 t ]],以及容量函数c:E → R+,埃德蒙兹-卡尔普算法如下:
- 初始化流f(e)=0,用于所有边缘.
- 构造剩余图 ]G f (包括容量等于流的后缘).
- 运行 BFS 运行于 G f 从 s ,以寻找最短的方向路径到 t (以边数计量).
- 如果没有路径,则终止;当前流是最大流.
- 否则,确定沿途的瓶颈能力(最低剩余能力)。
- 沿途增加这一数额,并更新剩余能力。
- 从第二步重复。
使用 BFS 保证每个发现的增强路径都是剩余图中最短的路径。关键属性出现:从 s 到 t 在剩余图中,从不减少和严格增加每个 O(E) 重迭。这直接导致复杂度的束缚。
复杂性分析
每个BFS的运行时间是O(V + E),它将典型的稀疏图的运行时间简化为O(E)]]。核心挑战是限制增强次数。因为每个增强面至少饱和一个边缘(瓶颈),每个边缘最多可以饱和V/2 乘以(因为每次饱和使s 至t]的距离至少一个),因此,增强路径的总数是O(VE)。
更确切地说,标准分析显示,加合次数最多为O(VE)],因此总时间为O(V E2)][(或O(V E*(V+E)][[FLT:pick]]]],对于FLT:6]E=(V2)的密集图表,这变成了O(V4],这对大型网络来说相当缓慢。然而,在实践中,性能往往比最坏的个案要好,特别是对单位容量网络或当图时。
与其他最大流算法的比较
迪尼奇的算法
Dinic的算法还使用BFS构建一个关卡图,但随后允许在单相间通过DFS在关卡图上进行多个加载路径。这最多可以将BFS运行到V(因为汇的关卡会增加每个关卡 。 总体复杂程度是O(V2 E),一般情况下,O(E)O(E) ,用于单位容量双方匹配。对于大多数实用网络来说,Dinc会同时传递许多路径的流量,Edmonds-Karp的超额。
按下- 重新标签算法
Push-relabel方法,如通用算法或最高标签变体,可以实现O(V2 QQE)或O(V3)]边界。它们通过沿着合格边缘推动本地流,重新贴上顶点来维持有效的标签,这些算法执行起来更加复杂,但在实践中运行得往往更快,特别是对于大,密集的图,最高标签推-relabel算法被广泛用于竞争性编程和现实世界流解器.
另一个重要的变体是容量缩放算法,它为福特-福尔克森方法增加了一个缩放参数,生成[O(E2 log U),其中U是最大容量,这也是一种多名但比推重标签简单.
为什么埃德蒙德-卡尔普仍然重要
尽管比Dinic和push-relabel慢,但Edmonds-Karp在教学上很有价值。 它的简单和直观的多诺运行时间(基于最短路径的单调)证明使它成为了极好的教学工具。 许多计算机科学课程在转向更先进的方法之前引入了Edmonds-Karp。 此外,对于中小型网络(比如,高达几千个顶点和边缘)来说,实际性能差异可能微不足道,特别是如果图很稀少,而且其边缘能力也很低。
实际影响和使用案例
在现实世界应用中,算法选择在很大程度上取决于问题限制。例如:
- 双边匹配 :Edmonds-Karp在容量单位和网络为双方时会降低到Hopcroft-Karp算法?实际上没有 — Hopcroft-Karp是一个具有O(E) ⁇ V]时间的专用算法;然而,Edmonds-Karp在单位容量双方图运行于O(V)O(V)中度大小均能接受的增强路径,而增量则受最大流量值FFF的限定。
- 塔夫工程:在电信和公路网络中,流量往往很大,图案稀少. Dinic或推重标签由于更好的缩放而更受青睐.
- 图像分解:计算机视觉的图形剪切算法往往依赖于最大流/min剪切计算. 博伊科夫-科勒莫戈罗夫算法,一种专门的增强路径方法,经常超越这些网格状图形的通用算法,但埃德蒙兹-卡尔普可用于较小的问题.
- 教育和原型:当简单和正确性高于原始速度时,埃德蒙德斯-卡尔普是一个安全的选择,其行为是可预测的,调试是直接的,因为BFS易于执行.
经验性能
随机图的基准显示,埃德蒙德斯-卡尔普在边缘容量小(O(1)])时,经常在近线性时间内运行,因为增强值以最大流量值为界,而最大流量值可能很小,但是,对于高容量网络,算法可以降解。例如,考虑一个容量大整数的网络;流量值可能很大,导致许多增强值。在这种情况下,Dinic或缩放方法更强健。
执行情况考虑
执行 Edmonds-Karp 时,小心的剩余图管理至关重要。 代表前边和后边都允许轻松的增强和回溯。 使用带有指针的辅助列表来简化更新。 BFS 也必须记录前身来重建增强路径。 内存使用是 [[FLT: 0]] O(V + E) , 类似于其他算法 。
优化包括:
- 如果BFS无法达到t,则提前终止.
- 利用整数能力和流量避免浮点问题.
- 如果图中有许多平行边缘(虽然不太常见),则聚合多重增强.
对于非常大的网络,考虑使用动态的BFS,以渐进方式更新距离,但这往往增加复杂性,而具体来说,Edmonds-Karp却没有显著收益.
与福特-福尔克森方法的原始关系
杰克·埃德蒙兹和理查德·卡普在1972年公布了他们的算法,证明使用BFS产生一个多诺时最大流算法,在此之前,福特-福尔克森方法(1956年)没有指定路径选择规则,人们知道,差的选择会导致指数时间. 埃德蒙兹和卡普的工作是开发网络流强多诺时算法的基础步骤. 论文["网络流问题算法效率的理论改进"仍然是经典的参考.
扩展和变化
埃德蒙兹-卡尔普的备选案文包括:
- 能力缩放版本:算法不是总是沿着最短路径进行加长,而是使用一个缩放参数[ + ⁇ ,只考虑剩余容量的边 → → 。这会产生一个 O(E2 log U)算法。
- 单位容量优化:当所有容量为1时,基于BFS的增强路径算法专门用于Hopcroft–Karp算法,尽管后者使用谨慎的交替BFS/DFS来实现O(E ⁇ V)].
- 集成性:当能力是完整的时,算法自然保持整体流,使其适合组合问题.
结论
Edmonds-Karp算法是解决最大流量问题的可靠和广为人知的方法。它O(V E2)[]最糟糕的时间复杂性使得它对于非常大或密集的网络来说不切实际,但其简单性和明确证明多诺运行时间的证明已经巩固了它在算法教科书中的地位。 对于需要高性能的实时系统,一般倾向于Dinic的算法或推重标签方法。 然而,对于教育环境,小规模问题,或者作为正确性核实的基准,Edmonds-Karp仍然是一个宝贵的工具。
关于高级流算法的进一步解读,可见于维基百科文章和经典教科书 算法导论[ (CLRS). 关于流算法性能的更深入分析,见NetworkX流执行注释[.