Skip to content

算法Algorithm

Hopcroft–Karp 算法

施工中 · 内容逐步修订

Hopcroft-Karp algorithm

按阶段同时增广一族顶点不交的最短增广路,以包含孤立点读取成本的 O(V+E√V) 时间求二分图最大匹配。

形式陈述 ​

给定二分图 G=(L∪˙R,E) 与当前匹配 M。把每条非匹配边定向为 L→R,每条匹配边定向为 R→L;于是从未匹配左点到未匹配右点的有向路,恰是相对于 M 的增广路。

一个 phase 先从所有未匹配的 L 顶点做多源BFS,只在交替方向上前进,首次到达未匹配右点时记录最短距离 ℓ,继续处理所有可能到达该层的前驱,但不再向更深层扩展。层次图保留全部最短增广路所需的方向边,也可能含最终不能到达空闲右点的分支。随后从各未匹配左点做受层次约束的DFS,找出一个极大的、两两顶点不交的最短增广路族;每找到一条路就沿路翻转匹配状态,本阶段其余路径不再使用这些顶点。

每条增广路的非匹配边比匹配边多一条,翻转使 |M| 增加 1;路径顶点不交保证同阶段的翻转彼此不冲突。DFS 达到极大后,不再有与本阶段已选路径顶点不交的旧最短增广路。新匹配的最短增广长度严格增加,理由如下。若 BFS 已找不到增广路,Berge 定理给出 M 为最大匹配。

保留本阶段开始时的 BFS 层号。翻转新增的有向边都是已选层次边的反向,故沿它走会降低一层;其余旧边最多增加一层。新的空闲端点是旧空闲端点的子集,所以一条长度不超过 ℓ 的新增广路必须每步恰好升一层,且长度恰为 ℓ。它不能使用任何新反向边;也不能经过已选路径的任何顶点:这些点在新匹配中都已匹配,增广路必须使用其唯一匹配边,而这些匹配边恰是本阶段新增的反向边。因此它必须与已选路径顶点不交,与极大性矛盾。

阶段数的 O(|V|) 证明分成两段。短路阶段中,最短长度每次严格增加,因此长度不超过 |V| 的 phase 至多 O(|V|) 个。设此后最短增广路至少含 ℓ>|V| 条边,取任一最大匹配 M∗;对称差 M△M∗ 分解出的 |M∗|−|M| 条 M-增广路两两顶点不交,每条至少占 ℓ+1 个顶点,故

|M∗|−|M|≤|V|ℓ+1<|V|.

余下每个 phase 至少增广一条路,所以也不到 |V| 个。

在邻接表和单位成本 RAM 下,BFS 与带失败标记/当前邻边位置的 DFS 每 phase 共扫描 O(|V|+|E|)。删除孤立点后 |E|=Ω(|V|),经典总界为

O(|E||V|);

先花线性时间记录并剔除孤立点、只在其余图上分阶段搜索;若输出仍须保留这些未匹配顶点,完整界为 O(|V|+|E||V|)。空间为 O(|V|+|E|)。该界按显式简单二分图计数;保留重复边时,|E| 应计入全部输入记录。

直觉

逐条增广会反复穿过相同的浅层交替区域。Hopcroft–Karp 先冻结“当前最短要走几步”,再一次找尽一组互不争用顶点的最短修正路线。一个 phase 结束后,所有同长度机会都已被阻断,搜索被迫转向更长的结构。

批量化能奏效,是因为匹配约束发生在顶点:两条增广路只要共享一个端点,同时翻转就可能让该点关联两条匹配边。要求顶点不交正好让各条路径的局部修改可交换。

Hopcroft–Karp 的批量最短增广
例子与边界

令

L={a,b,c,d},R={1,2,3,4},

当前匹配为 M={c1,d2},另有边 a1,c3,b2,d4。未匹配左点是 a,b,未匹配右点是 3,4。BFS 找到两条长度为 3 的最短增广路

a−1−c−3,b−2−d−4.

它们顶点不交,可在同一 phase 翻转,得到 {a1,c3,b2,d4},匹配大小从 2 增至 4。若两条候选路共享右点 1,只能接受其中一条;仅仅边不交并不足够。

实现常用虚拟 NIL 表示未匹配右端。BFS 只扩展距离小于 dist[NIL] 的左点;DFS 只走能使层次增加的交替边,失败后把该左点距离设为无穷,避免本 phase 重搜。成功回溯时必须同时更新左右两侧 mate 数组,否则两份匹配表示会不一致。

一般非二分图中的奇交替圈会让这套左右定向失效,最大匹配需要 blossom 收缩等方法。平行边对顶点匹配没有额外作用,可以预先合并;若不合并,只会增加扫描成本。孤立顶点合法且永远未匹配,不应造成 BFS 反复入队。

推论与应用

把二分图匹配归约为单位容量流时,左点只有一条来自源的入弧,右点只有一条通往汇的出弧,得到Dinic 算法的 unit network。Hopcroft–Karp 直接在交替图上实现同一“BFS 分层 + 阻塞最短增广路”机制,无需显式存储超级源、超级汇及其弧。

算法输出最大基数匹配,不处理边权、偏好稳定性或顶点多重容量。加权指派需要费用/势函数方法,医院—住院医稳定匹配又优化另一种偏好条件;共享二分图输入不意味着目标相同。

最大匹配还可应用Kőnig 定理的构造得到同大小的最小顶点覆盖:从未匹配左点沿最终交替可达关系取集合 Z,覆盖可取 (L∖Z)∪(R∩Z)。这一对同值证书可用于独立核验匹配大小。

参考资料
  • John E. Hopcroft and Richard M. Karp, “An n5/2 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。
关系图谱13 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系