二分匹配
概述
二分匹配(Bipartite Matching)是在二部图中寻找最大的边集,使得任意两条选中的边不共享端点,是组合优化中的经典问题。
定义
形式化定义
给定二部图 ,一个匹配(matching) 是一个边集,满足 中任意两条边没有公共端点。
- 最大匹配(maximum matching):边数 最大的匹配
- 完美匹配(perfect matching): 的匹配,即覆盖较小部中所有顶点的匹配
- 最大基数匹配(maximum cardinality matching):即最大匹配
- 最大权匹配(maximum weight matching):在带权二部图中,使选中边权重之和最大的匹配
核心概念
交替路径与增广路径
- 交替路径(alternating path):路径上的边交替属于 和
- 增广路径(augmenting path):两端均为未匹配顶点的交替路径。沿增广路径翻转匹配状态,可使匹配边数
匹配的关键定理
Berge 定理
匹配 是最大匹配,当且仅当 中不存在关于 的增广路径。
König 定理
在二部图中,最大匹配的边数 = 最小顶点覆盖的顶点数。
Hall 定理
二部图 存在完美匹配,当且仅当对任意 ,。
求解算法
方法一:转化为最大流
构造流网络:
- 添加超级源点 和超级汇点
- 向 中每个顶点连边,容量为 1
- 中每个顶点向 连边,容量为 1
- 原二部图中的每条边方向为 ,容量为 1
- 在该网络上求最大流,流量值即为最大匹配边数
时间复杂度取决于最大流算法(如 Edmonds-Karp 为 )。
方法二:Hopcroft-Karp 算法
专为二分匹配设计的算法,核心思想是同时寻找多条最短增广路径:
- 时间复杂度:
- 比直接用最大流更高效
- 分为 BFS(构建分层图)和 DFS(多路增广)两个阶段交替执行
方法三:匈牙利算法
用于求解最大权匹配问题:
- 时间复杂度:
- 基于 KM(Kuhn-Munkres)算法,利用势函数和等价子图
应用场景
- 任务分配:工人与任务的匹配,最大化分配数量或总效益
- 课程安排:将课程分配到时间槽,确保不冲突
- 顶点覆盖:利用 König 定理,通过最大匹配构造二部图的最小顶点覆盖
- 稳定婚姻问题:Gale-Shapley 算法求解稳定匹配