“Hopcroft–Karp 算法直接在交替图中批量处理最短增广路;包含读取孤立点的完整时间界为 $O(n+m\sqrt n)$,空间为 $O(n+m)$。本页的逐条增广证明仍可用来理解其残量…”
形式陈述
给定二分图
一个 phase 先从所有未匹配的
每条增广路的非匹配边比匹配边多一条,翻转使
保留本阶段开始时的 BFS 层号。翻转新增的有向边都是已选层次边的反向,故沿它走会降低一层;其余旧边最多增加一层。新的空闲端点是旧空闲端点的子集,所以一条长度不超过
阶段数的
余下每个 phase 至少增广一条路,所以也不到
在邻接表和单位成本 RAM 下,BFS 与带失败标记/当前邻边位置的 DFS 每 phase 共扫描
先花线性时间记录并剔除孤立点、只在其余图上分阶段搜索;若输出仍须保留这些未匹配顶点,完整界为
直觉
逐条增广会反复穿过相同的浅层交替区域。Hopcroft–Karp 先冻结“当前最短要走几步”,再一次找尽一组互不争用顶点的最短修正路线。一个 phase 结束后,所有同长度机会都已被阻断,搜索被迫转向更长的结构。
批量化能奏效,是因为匹配约束发生在顶点:两条增广路只要共享一个端点,同时翻转就可能让该点关联两条匹配边。要求顶点不交正好让各条路径的局部修改可交换。
例子与边界
令
当前匹配为
它们顶点不交,可在同一 phase 翻转,得到
实现常用虚拟 NIL 表示未匹配右端。BFS 只扩展距离小于 dist[NIL] 的左点;DFS 只走能使层次增加的交替边,失败后把该左点距离设为无穷,避免本 phase 重搜。成功回溯时必须同时更新左右两侧 mate 数组,否则两份匹配表示会不一致。
一般非二分图中的奇交替圈会让这套左右定向失效,最大匹配需要 blossom 收缩等方法。平行边对顶点匹配没有额外作用,可以预先合并;若不合并,只会增加扫描成本。孤立顶点合法且永远未匹配,不应造成 BFS 反复入队。
推论与应用
把二分图匹配归约为单位容量流时,左点只有一条来自源的入弧,右点只有一条通往汇的出弧,得到Dinic 算法的 unit network。Hopcroft–Karp 直接在交替图上实现同一“BFS 分层 + 阻塞最短增广路”机制,无需显式存储超级源、超级汇及其弧。
算法输出最大基数匹配,不处理边权、偏好稳定性或顶点多重容量。加权指派需要费用/势函数方法,医院—住院医稳定匹配又优化另一种偏好条件;共享二分图输入不意味着目标相同。
最大匹配还可应用Kőnig 定理的构造得到同大小的最小顶点覆盖:从未匹配左点沿最终交替可达关系取集合
参考资料
- John E. Hopcroft and Richard M. Karp, “An
Algorithm for Maximum Matchings in Bipartite Graphs,” SIAM Journal on Computing 2(4), 1973, pp. 225–231。 - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 25。
- Bernhard Korte and Jens Vygen, Combinatorial Optimization: Theory and Algorithms, 6th ed., Springer, 2018, bipartite matching and augmenting paths。