二分匹配

二分匹配是在二部图中找到最多的两两不共享端点的边集,可通过归约为最大流问题或使用专门的匹配算法高效求解。

定义

形式化定义

给定二部图 ,其中 中每条边的一个端点在 中、另一个在 中。

匹配 的一个子集,使得 中任意两条边不共享端点。

  • 匹配大小,即 中边的数量
  • 最大匹配:所有匹配中边数最多的匹配
  • 完美匹配,即每个顶点都被匹配
  • 已匹配/未匹配顶点:在匹配 下,有边关联的顶点为已匹配顶点,否则为未匹配顶点(自由顶点)

最大二分匹配问题:在二部图中找到最大匹配。

核心性质

性质描述
最大匹配 = 最大流值通过构造单位容量流网络,$
Berge判据 是最大匹配 不存在 -增广路径
完美匹配条件$
König-Egerváry二部图中最大匹配 = 最小顶点覆盖
容量1保证流网络中所有边容量为1,天然保证每个顶点最多被匹配一次

关系网络

graph LR
    A["二分匹配问题"] --> B["最大流归约<br/>O(VE)"]
    A --> C["简单增广算法<br/>O(VE)"]
    A --> D["Hopcroft-Karp<br/>O(E√V)"]
    A --> E["匈牙利算法<br/>O(V³)"]
    B --> F["Ford-Fulkerson<br/>单位容量网络"]
    C --> G["BFS/DFS逐条增广"]
    D --> H["BFS分层+DFS批量增广"]
    A --> I["Berge定理"]
    I --> J["增广路径"]

章节扩展

第24章:最大流

24.3节展示了如何将最大二分匹配归约为最大流问题。构造方法:

  1. 添加源 和汇
  2. 中每个顶点 添加边 ,容量为1
  3. 中每个顶点 添加边 ,容量为1
  4. 原图中每条边 , )设为有向边,容量为1
  5. 在此流网络上求最大流,流量为1的 边构成最大匹配

在单位容量网络上,Edmonds-Karp算法的复杂度从 改进到 :每次增广使流值恰好增加1,最多增广 次,每次BFS耗时

第25章:二部图匹配

25.1节介绍了不依赖最大流框架的直接匹配算法。

简单增广算法:从空匹配出发,反复用BFS/DFS搜索增广路径并沿路径翻转匹配状态,每次使匹配规模增加1。时间复杂度

Hopcroft-Karp算法:每轮BFS构建分层图,然后DFS同时找出多条顶点不相交的最短增广路径,一次性增广。总轮数 ,总时间

补充

补充说明

二分匹配在求职者-岗位匹配、课程-教室分配、肾交换程序、推荐系统与在线广告等领域有广泛应用。匹配理论的历史跨越一个多世纪:König (1916) 证明König定理,Hall (1935) 发表婚配定理,Kuhn (1955) 和 Munkres (1957) 提出匈牙利算法,Hopcroft和Karp (1973) 提出 算法。

参见