【算法分析与设计】第19篇:二分图匹配与指派问题

假设你是一个项目主管,手上有n个任务和m个员工,每个员工只能胜任其中一部分任务,每项任务至多分配给一人。问最多能同时推进多少项任务?这就是典型的二分图最大匹配 问题。如果将"能否胜任"替换为"完成效率",要求总效率最高的分配方案,则对应指派问题。这两个问题构成了二分图匹配的理论核心,也在无数现实场景中发挥着作用。


一、二分图与匹配的基本定义

二分图是指顶点集可以划分为两个不相交子集 LL 和 RR,使得图中所有边均连接 LL 中一个顶点与 RR 中一个顶点,同一侧内部无边。二分性可以用无奇环来刻画:一个图是二分图当且仅当它不包含奇数长度的环。

匹配 是图中一组边的集合,其中任意两条边不共享顶点。匹配中的边称为匹配边 ,其端点称为已匹配顶点 ,其余为未匹配顶点 。若匹配覆盖了所有顶点,称为完美匹配 ;若无法再添加任何边而保持匹配性质,称为极大匹配 ;边数最多的匹配称为最大匹配


二、最大流归约:网络流视角下的匹配

二分图最大匹配问题可以优美地转化为最大流问题。构造方法如下:

在原二分图 G=(L∪R,E)G=(L∪R,E) 的基础上,添加一个超源点 ss 和一个超汇点 tt。从 ss 向 LL 中每个顶点连一条容量为1的边,从 RR 中每个顶点向 tt 连一条容量为1的边,原图 EE 中的每条边从 LL 侧指向 RR 侧,容量同样设为1(或 ∞∞,在此等价)。

此网络上的任意一个整数流,在 LL 到 RR 的边上流量只能为0或1------容量为1约束了这一点。流量为1的边恰好构成一个匹配:每个 LL 顶点至多发出1单位流量(匹配至多一条边),每个 RR 顶点至多接收1单位流量(被至多一个 LL 顶点匹配)。流的值即为匹配的边数。由最大流最小割定理及整数流性质可知,此网络的最大流即对应二分图的最大匹配。

在这个归约框架下,第17至18篇讨论的Ford-Fulkerson、Edmonds-Karp和Dinic算法均可直接用于求解二分图最大匹配。对于二分图,Dinic算法的时间复杂度为 O(∣V∣⋅∣E∣)O(∣V∣​⋅∣E∣)(Hopcroft-Karp的分析即等价于此),显著优于一般图上的 O(∣V∣2⋅∣E∣)O(∣V∣2⋅∣E∣)。不过,针对二分图的结构特点,还可以设计出更简洁、更直观的专用算法------匈牙利算法。


三、匈牙利算法:交替路与增广路

匈牙利算法是求解二分图最大匹配的经典方法,其核心思想可追溯至König和Egerváry的工作,后由Kuhn整理为完备算法。算法仅使用邻接结构,无需显式构造流网络。

算法的核心操作围绕两条路径概念展开。设当前已有一个匹配 MM,交替路 是指一条路径,其边在匹配 MM 与不在 MM 中交替出现。增广路则是一条特殊的交替路------其起点和终点均为未匹配顶点。

增广路的关键性质是:将增广路上所有边的匹配状态取反(原匹配边变为非匹配边,原非匹配边变为匹配边),匹配的边数增加1,且仍然是一个合法匹配。这是因为首尾顶点原未匹配,翻转后恰好各增加一条匹配边,而中间顶点的匹配状态保持不变。

匈牙利算法以此为基本操作,从每个 LL 中的未匹配顶点出发,尝试寻找一条以它为起点的增广路:

  1. 初始匹配 M=∅M=∅。

  2. 对 LL 中每个未匹配顶点 uu,启动一次搜索(通常用DFS),在交替路上前进,寻找能否抵达 RR 中的某个未匹配顶点。

  3. 若找到增广路,执行翻转操作,匹配数加1。

  4. 若找不到,则该顶点在后续过程中不再作为起点(Berge定理保证它永远不可能被匹配)。

每次DFS的时间为 O(∣E∣)O(∣E∣),至多执行 O(∣V∣)O(∣V∣) 次搜索,总复杂度 O(∣V∣⋅∣E∣)O(∣V∣⋅∣E∣)。实际运行中通常远小于这个上界。


四、Berge定理与König定理:理论支撑

匈牙利算法的正确性由Berge定理保证:一个匹配 MM 是最大匹配当且仅当不存在关于 MM 的增广路。必要性显然------存在增广路则可扩大匹配;充分性则需证明若 MM 非最大,必存在增广路。这一定理是匹配理论的基石,也解释了为何匈牙利算法在无法找到任何增广路时即可终止。

在二分图的理论中,还有一条同样深刻的König定理:二分图的最大匹配数等于最小顶点覆盖数。顶点覆盖是一组顶点,使得图中每条边至少有一个端点属于该集合。这一对偶关系与最大流最小割定理一脉相承------在网络流归约中,最小割直接对应最小顶点覆盖。

此外,Hall婚姻定理给出了二分图存在完美匹配的充要条件:对于 LL 的任意子集 XX,其邻居集合 N(X)N(X) 的大小至少为 ∣X∣∣X∣。这条定理在分配问题中具有直观的"瓶颈"含义------任何一组任务所需的技能种类数不得少于该组任务数,否则无法全部分配。


五、指派问题与KM算法概要

当每条边不仅表示能否匹配,还附有一个权重(收益或成本)时,问题升级为最大权完美匹配 ,也称指派问题。此时不仅要求匹配覆盖所有顶点,还要求匹配的总权重最大(或成本最小)。

Kuhn-Munkres算法(简称KM算法)是求解这一问题的经典方法,其核心思想是可行顶标 。为每个顶点 vv 维护一个顶标 l(v)l(v),满足对任意边 (u,v)(u,v),l(u)+l(v)≥w(u,v)l(u)+l(v)≥w(u,v)(求最大权时)。满足等号成立的边构成相等子图。算法通过不断调整顶标,使相等子图逐步扩大,直至包含一个完美匹配。

KM算法的标准实现时间复杂度为 O(∣V∣3)O(∣V∣3),与Floyd-Warshall在同一量级。在成本最小化版本中,通常将权重取反或使用费用流模型。若二分图两侧规模不等,可补足虚顶点并设权重为0,转化为标准形式。


六、应用与后续

二分图匹配在实际系统中的应用极为广泛。在打车平台中,乘客与司机的实时匹配可建模为二分图的最大匹配或最大权匹配;在推荐系统中,用户与物品的匹配偏好天然构成二分图;在计算广告中,广告位与广告主的分配直接对应指派问题。网络流与二分图匹配的交织,也引出了一个更一般的问题框架------带权的、带容量约束的分配,这正是最小费用最大流所处理的范畴。在后续篇章中,我们将进入这一领域,探讨费用流问题的建模与求解方法。

相关推荐
机器学习之心6 小时前
上海原油期货收益率研究数据集说明
大数据·人工智能·上海原油期货收益率
学习中.........6 小时前
从傅里叶级数到傅里叶变换:详细的数学推导
算法
宇宙realman_9996 小时前
420B污染度等级查询代码
java·开发语言·算法
rannn_1116 小时前
OpenAI Function Calling 全解析:从函数定义到流式调用
人工智能·chatgpt·openai·ai agent
森诺Alyson6 小时前
前沿技术借鉴研讨-2026.5.28(眼动数据预测抑郁&自杀倾向)
论文阅读·人工智能·深度学习·分类·论文笔记
Dfreedom.6 小时前
深度学习量化技术全景解析:从校准算法到量化算子的完整指南
人工智能·深度学习·算法·量化·模型加速
机器之心6 小时前
Claude Opus 4.8问世,Anthropic估值暴涨至9650亿美元
人工智能·openai
Jason_zhao_MR6 小时前
纳秒级抖动×24小时零丢帧:RK3576工业级EtherCAT主站全拆解
大数据·人工智能·单片机·嵌入式
机器之心6 小时前
「马嘉祺」让大模型翻车,而他一年前洗澡时就发现了问题
人工智能·openai