Dinic 二分图匹配 / Hopcroft-Karp 算法 复杂度简单证明
这是一个困扰了我很久的问题,最近在算导上看到了 H-K 算法,网上提到复杂度证明的较少,故在 Wiki 上翻了一下并进行简单翻译和补充以造福社会
垃圾百度百科竟然是 Wiki 的机翻
Dinic 和 Hopcroft-Karp 算法的思路是每一次找到若干条最短的增广路同时增广。先给出结论:在左部点和右部点中较多的点数为 、边数为 的二分图上使用 Dinic 或 Hopcroft-Karp 算法求解最大匹配的最劣时间复杂度是 的,下面给出简单的证明。
首先给出一个结论:
- 在某一轮增广过程结束后,下一轮增广过程的增广路长度一定比这一轮的增广路长度长。
Proof. 使用反证法。
假设下一轮的增广路径不长于这一轮的增广路径。如果在下一轮的所有增广路中存在一条增广路没有退这一轮的任何增广路的流,那么因为这条增广路径要么比这一轮的增广路径短,要么一样长,所以要么这一轮的增广路不是最短的,要么这一条增广路也应该在这一轮一起增广,矛盾。
所以只需要考虑下一轮的增广路退了这一轮增广路的流的情况。假设两条增广路分别是 和 ,那么可以得到 和 这两条增广路一定存在一条比 短,所以 并不是最短增广路,矛盾。
所以每一轮的增广长度一定是递增的。而边的流量都是 所以增广一轮的复杂度是 的,故对于增广路长度 的所有路径,需要 的时间进行增广。
增广完了这些路径后,接下来的增广路径长度 。设当前得到的匹配为 ,选一个原图的最大匹配 ,那么 ( 指对称差)会是一些路径和若干个环的并集。对于环我们可以调整 将这个环从对称差中消去,那么可以找到一个 使得 中只有若干条路径。此时 的边数是 级别的,因为一个点最多与两个点在这个图上相连。同时这个图一定可以划分为边不交的若干条路径,使得每一条路径都是 匹配的增广路,沿着这些路径增广就可以得到最大匹配 。
总共只有 条边,可以划分为若干条边不交的路径,每一条路径的长度至少是 ,所以至多只有 条路径,即 。每一条增广路最劣情况下需要 的时间增广,所以这一部分也是 的。
所以加起来就是 的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2019-03-24 LOJ2514 CEOI2011 Hotel 贪心
2019-03-24 ARC089E GraphXY 构造