图的匹配问题(Berge 引理与交错路径)
题目描述
给定一个无向图 \(G = (V, E)\),其顶点集为 \(V\)、边集为 \(E\)。一个匹配(matching)是边集 \(E\) 的一个子集 \(M\),使得 \(M\) 中任意两条边没有公共顶点。匹配 \(M\) 的大小是 \(|M|\)(即其中边的数量)。
我们的目标是判断给定的匹配 \(M\) 是否是最大匹配,并理解如何通过“交错路径”来检验匹配的最大性,而不必直接求解最大匹配。
这是图匹配理论中的一个核心问题,Berge 引理(Berge’s lemma)给出了判断匹配是否最大的关键条件。
解题过程
步骤 1:定义基本概念
- 匹配 \(M\):边集子集,无公共顶点。
- 匹配点(matched vertex):匹配 \(M\) 中某条边的端点。
- 非匹配点(unmatched / free vertex):不在 \(M\) 中任何边的端点。
- 交错路径(alternating path):路径上边交替地属于 \(M\) 和 \(E \setminus M\)(非匹配边)。
- 可增广路径(augmenting path):起点和终点都是非匹配点的交错路径。
例子:
图有顶点 \(a,b,c,d\) 和边 \((a,b),(b,c),(c,d)\),匹配 \(M = \{(a,b)\}\)。
顶点 \(a,b\) 是匹配点,\(c,d\) 是非匹配点。
路径 \(c \to b \to a\) 是交错路径吗?
- 边 \((c,b)\) 不在 \(M\) 中(非匹配边)
- 边 \((b,a)\) 在 \(M\) 中(匹配边)
所以是交错路径,但起点 \(c\) 是非匹配点,终点 \(a\) 是匹配点 → 不是可增广路径。
路径 \(d \to c \to b \to a\) 是:
- \((d,c)\) 非匹配边
- \((c,b)\) 非匹配边?等等,这里需要交替。检查:
\(d \to c\)(非匹配)
\(c \to b\)(非匹配)→ 违反了交替!所以不是交错路径。
正确例子:匹配 \(M = \{(b,c)\}\) 时,路径 \(a \to b \to c \to d\) 是否为交错路径?
- \(a \to b\) 非匹配边
- \(b \to c\) 匹配边
- \(c \to d\) 非匹配边
起点 \(a\)、终点 \(d\) 都是非匹配点 → 是可增广路径。
步骤 2:Berge 引理的表述
Berge 引理:匹配 \(M\) 是最大匹配,当且仅当图中不存在关于 \(M\) 的可增广路径。
直观理解:
如果存在可增广路径,比如 \(v_0, e_1, v_1, e_2, v_2, \dots, e_k, v_k\) 其中 \(v_0, v_k\) 是非匹配点,边依次为非匹配、匹配、非匹配、…、非匹配(路径长度为奇数)。
这条路径的边数 = \(k\)(设 \(k\) 为奇数,比如 3, 5, …)。非匹配边比匹配边多一条。
那么我们可以将路径上的匹配边变为非匹配边,非匹配边变为匹配边(称为“翻转”操作),得到的新匹配大小是 \(|M| + 1\)。
这样 \(M\) 就不是最大匹配。
反之,如果不存在可增广路径,则 \(M\) 是最大匹配。
步骤 3:如何利用 Berge 引理检验匹配的最大性
给定图 \(G\) 和匹配 \(M\),要判断 \(M\) 是否最大,只需要搜索是否存在一条可增广路径。
算法思想(类匈牙利算法思路):
- 找到所有非匹配点,作为可能的路径起点。
- 从某个非匹配点开始,沿着“交错路径”规则进行搜索(类似 BFS 或 DFS),尝试到达另一个非匹配点。
- 搜索时,必须满足路径的边交替为:非匹配边 → 匹配边 → 非匹配边 → …。
具体 BFS 方法:
- 从非匹配点 \(u\) 开始,先走非匹配边到邻居 \(v\)。
- 如果 \(v\) 是匹配点,则必须走匹配边到与 \(v\) 匹配的顶点 \(w\)(即 \((v,w) \in M\)),然后从 \(w\) 再走非匹配边到下一个顶点,依此类推。
- 如果搜索过程中遇到另一个非匹配点,就找到了一条可增广路径。
步骤 4:举例说明检验过程
例:图有 6 个顶点 \(1,2,3,4,5,6\) 和边:
\((1,2),(2,3),(3,4),(4,5),(5,6)\)。
匹配 \(M = \{(2,3), (4,5)\}\)。
匹配点:{2,3,4,5},非匹配点:{1,6}。
从非匹配点 1 开始 BFS:
- 1 的邻居是 2(边 (1,2) 是非匹配边)
- 2 是匹配点,必须沿着匹配边 (2,3) 到 3
- 从 3 可以走非匹配边 (3,4) 到 4(但注意 (3,4) 是非匹配边吗?是的,因为 M 中有 (4,5) 和 (2,3),(3,4) 不在 M 中)
- 4 是匹配点,必须沿匹配边 (4,5) 到 5
- 从 5 可以走非匹配边 (5,6) 到 6
- 6 是非匹配点!找到可增广路径:1→2→3→4→5→6。
检查交替性:
边 (1,2) 非匹配 ✓
(2,3) 匹配 ✓
(3,4) 非匹配 ✓
(4,5) 匹配 ✓
(5,6) 非匹配 ✓
起点 1 和终点 6 都是非匹配点 ✓
所以这是可增广路径。
根据 Berge 引理,匹配 \(M\) 不是最大匹配。
翻转路径上的边:原来是匹配的 (2,3),(4,5) 移出 M,原来非匹配的 (1,2),(3,4),(5,6) 加入 M,新匹配 \(M' = \{(1,2),(3,4),(5,6)\}\),大小 3,比原来的 2 大。
步骤 5:算法实现与复杂度
搜索可增广路径可以用 BFS 或 DFS 在 \(O(|V| + |E|)\) 时间内完成。
因为只需要对每个非匹配点作为起点搜索一次,最坏情况是尝试所有非匹配点,但一旦找到一条可增广路径就可以停止。
所以检验给定匹配是否为最大匹配的复杂度是 \(O(|V| + |E|)\)。
步骤 6:总结
- Berge 引理给出了最大匹配的充要条件:不存在可增广路径。
- 我们可以通过 BFS/DFS 寻找交错路径来检验匹配的最大性,无需运行完整最大匹配算法(如匈牙利或开花算法)。
- 这是许多匹配算法(如匈牙利算法、Hopcroft–Karp 算法)的核心理论基础,这些算法本质上就是系统性地搜索并消除可增广路径,直到匹配最大。
通过这种方法,我们就能判断一个匹配是否最大,并理解其与“可增广路径”的深刻联系。