匈牙利算法定理-匈牙利匹配原理
1人看过
二分图是指一个图G=(V, E)的顶点集V可以分割成两个互不相交的子集X和Y,并且图中每条边e∈E所关联的两个顶点分别属于X和Y。直观上,可以将X和Y视为两类不同的对象集合,例如求职者与职位、任务与执行者等。

匹配是图论中的一个基本概念。在图G中,一个匹配M是边集E的一个子集,且M中任意两条边都没有公共顶点。若一个顶点与匹配M中的某条边相关联,则称该顶点是已匹配的;否则称为未匹配或自由顶点。
我们关注两类核心的匹配问题:
- 最大基数匹配:寻找包含边数最多的匹配。
- 完美匹配:如果一个匹配M覆盖了图G中的所有顶点(即每个顶点都是已匹配的),则称M为完美匹配。显然,完美匹配是最大基数匹配的一种特殊情况,要求|X| = |Y|。
当图的边被赋予权重(代表成本或效益)时,问题就演化为:
- 最小权重完美匹配:在所有权重完美匹配中,寻找总权重最小的一个。
- 最大权重完美匹配:寻找总权重最大的一个。通过将权重取负,最大权重问题可以转化为最小权重问题。
匈牙利算法最初是为解决指派问题(即最小权重完美匹配问题)而设计的,但其核心思想同样适用于求解无权二分图的最大匹配。
二、 核心定理与思想:Kőnig定理与增广路径 匈牙利算法的理论基础深深植根于以下几个关键定理和概念。Kőnig定理:在二分图中,最大匹配的边数等于最小顶点覆盖的顶点数。这个定理揭示了匹配与覆盖之间的对偶关系,是二分图匹配理论的一块基石。虽然匈牙利算法不直接计算最小顶点覆盖,但该定理保证了算法寻找最大匹配的可行性。
增广路径:这是匈牙利算法(以及许多其他匹配算法)的灵魂所在。给定图G的一个匹配M,一条增广路径是指一条起点和终点均为未匹配顶点,且路径上的边在匹配M和非匹配边之间交替出现的路径。
增广路径具有一个极其重要的性质:如果将一条增广路径上的所有边进行“反转”(即原本属于匹配M的边从M中移除,原本不属于M的边加入M),那么得到的新边集M‘仍然是一个匹配,并且其边数比原匹配M多1。这是因为路径两端是未匹配点,反转操作实质上相当于为这两个未匹配点找到了配对对象,同时调整了路径中间点的配对关系,从而在不破坏匹配定义的前提下增加了一条匹配边。
Berge定理:一个匹配M是最大匹配,当且仅当图中不存在关于M的增广路径。这一定理为匈牙利算法提供了清晰的终止条件和算法框架:只要图中还存在增广路径,就可以通过反转操作扩大匹配;当无法找到任何增广路径时,当前的匹配就是最大匹配。
也是因为这些,匈牙利算法(针对无权最大匹配的DFS/BFS实现版本)的核心流程就是循环执行“寻找增广路径”和“反转匹配”这两个步骤,直到无法找到新的增广路径为止。
三、 经典匈牙利算法:最小权重完美匹配 对于带权重的二分图,目标是找到最小权重的完美匹配。经典的匈牙利算法通过引入顶标和相等子图的概念,巧妙地将加权问题转化为无权问题迭代求解。设二分图两部顶点集为X和Y,边权重为w(x, y)。算法引入两个顶标函数l(x)和l(y),分别作用于X和Y中的顶点。初始时,可以设置l(x) = max{w(x, y)} (对于最大权重匹配则取min), l(y)=0。
关键定义:对于给定的顶标l,定义相等子图Gl为原图的一个子图,其顶点集与原图相同,但边集只包含那些满足l(x) + l(y) = w(x, y)的边(x, y)。
核心定理(Kuhn-Munkres定理):如果相等子图Gl中存在完美匹配M,那么M就是原图的一个最小权重完美匹配。
这个定理是加权匈牙利算法的基石。算法的主要任务就是通过动态调整顶标l,逐步扩大相等子图Gl,直到Gl中包含一个完美匹配。调整顶标的原则是:在保持现有相等子图中边不变的前提下,让更多的边进入相等子图,从而为找到增广路径创造可能。
四、 算法步骤详解 标准的匈牙利算法(KM算法)遵循以下迭代步骤,易搜职考网建议学习者通过实例逐步演练以加深理解:步骤一:初始化顶标。对于X部的每个顶点xi,设置其顶标lx[i]为从xi出发的所有边的最大权重(若求最小权重,通常初始化ly[j]=0, lx[i] = max(w[i][j]))。对于Y部的每个顶点yj,设置其顶标ly[j] = 0。
步骤二:尝试在相等子图中寻找完美匹配。使用类似于无权二分图匹配的DFS或BFS方法(常称为“匈牙利树”方法),在当前的相等子图Gl中,为X部的每一个顶点尝试寻找增广路径,以得到当前Gl下的最大匹配。
步骤三:判断是否找到完美匹配。如果已经为所有X部顶点都找到了匹配,则算法结束,当前的匹配就是最小权重完美匹配。
步骤四:调整顶标。如果未找到完美匹配,则必然存在一个由X部未匹配点出发,在寻找增广路径过程中探索形成的交错树(匈牙利树)。设S为交错树中属于X部的顶点集合,T为交错树中属于Y部的顶点集合。计算调整量delta = min{lx[x] + ly[y] - w(x, y) | x ∈ S, y ∉ T}。这个delta是正值,它代表了将一条不在当前相等子图中、但连接S和Y-T的边引入相等子图所需的最小顶标调整量。
然后进行顶标调整: 对于所有在S中的X部顶点,执行 lx[x] -= delta。 对于所有在T中的Y部顶点,执行 ly[y] += delta。 这一调整保证了: - 对于已经在相等子图中的边(一端在S,一端在T),lx[x] + ly[y]不变,它们仍在Gl中。 - 对于连接S和Y-T的边,lx[x] + ly[y]减少了delta,使得至少有一条新的边满足lx[x] + ly[y] = w(x, y),从而进入相等子图Gl。 - 对于其他边,lx[x] + ly[y]可能增加或不变,但不会影响算法进程。
步骤五:返回步骤二。顶标调整后,相等子图Gl得到了扩展。在新的Gl中,至少有一条新的边从X部的S集合连接到Y部的非T集合,这为继续寻找增广路径提供了可能。然后返回步骤二,继续尝试寻找增广路径以扩大匹配。
算法通过有限次的顶标调整,最终会使相等子图包含一个完美匹配,从而得到原问题的最优解。其时间复杂度通常为O(n^3),其中n为顶点数,对于大多数实际应用场景来说呢效率很高。
五、 算法变体与应用场景 匈牙利算法及其思想衍生出多种变体,以适应不同的需求。- 最大基数匹配:对于无权二分图,可以使用简化的DFS/BFS搜索增广路径的版本,时间复杂度为O(VE)。这是许多网络流问题的基础。
- 最大权重匹配(不要求完美):可以通过添加虚拟顶点和零权重边,转化为完美匹配问题,或者修改算法终止条件。
- 稀疏图优化:当图非常稀疏时,使用邻接表存储和特定的数据结构(如优先队列)可以提升性能。
- 在线与动态匹配:在一些实时调度场景中,对象动态出现或消失,产生了动态二分图匹配问题,相关研究是当前算法领域的热点之一。
其应用场景极其广泛:
- 资源分配与调度:计算中心的任务分配、网约车平台订单与司机的匹配、工厂中机器与加工任务的安排。
- 人员指派:企业将项目组成员与子任务匹配,学校将导师与研究生双向选择。
- 图像处理与计算机视觉:在目标跟踪中,用于关联连续帧之间的检测框;在立体视觉中,用于寻找左右图像之间的像素对应点。
- 通信网络:在无线通信中,将信道分配给用户以最大化总吞吐量。

对于正在通过易搜职考网备考项目管理师、系统分析师、数据分析师等职业资格的学员来说呢,匈牙利算法所代表的精确优化思想是解决复杂规划问题的必备工具。理解其原理,有助于在案例分析或方案设计中,构建清晰的数学模型并选择高效的求解策略。
六、 归结起来说与启示 匈牙利算法以其优美的理论基础和强大的实用性能,历经数十年依然是解决指派类问题的首选算法之一。从Kőnig的图论奠基工作,到Kuhn的算法化阐述,再到后来者的各种优化,它体现了理论数学与工程实践的完美结合。掌握匈牙利算法,不仅仅是学会一套固定的计算步骤,更重要的是理解其背后的增广路径思想和通过顶标调整转化问题的技巧。这种“化归”思想——将复杂问题转化为一系列已解决的简单问题——是算法设计与分析的核心理念。 在实际工作中,面对人员与岗位的匹配、广告与用户的精准投放、生产资源的优化配置等问题时,具备匈牙利算法知识的专业人士能够迅速洞察问题本质,判断其是否属于二分图匹配模型,并评估应用该算法求解的可行性。即使问题规模巨大需要借助更高级的优化软件或启发式算法,对基础原理的深刻理解也是进行有效建模和结果分析的前提。易搜职考网在相关职业能力课程中强调此类经典算法,正是为了帮助学员构建坚实的知识体系,培养解决实际问题的核心逻辑能力,从而在职业生涯中应对各种复杂的优化与决策挑战。算法的学习是一个从理解到应用,再到创新的过程,匈牙利算法无疑是这个过程中一个极具价值的里程碑。
14 人看过
11 人看过
6 人看过
6 人看过



