匈牙利算法是由匈牙利数学家Edmonds于1965年提出。匈牙利算法是基于Hall定理中充分性证明的思想,它是二分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。这篇文章讲无权二分图(unweightedbipartite graph)的最大匹配(maximum matching)和完美匹配( perfect matching) ,以及用于求解匹配的匈牙利算(Hungarian Algorithm)
- 二分图是图论中的一种特殊模型。若能将无向图G=(V,E)的顶点V划分为两个交集为空的顶点集,并且任意边的两个端点都分属于两个集合,则称图G为一个为二分图。
- 二分图(Bipartite graph)是一类特殊的图,它可以被划分为两个部分,每个部分内的点互不相连。
- 匹配: G是一个图,那么G中不相邻的边(两条边不能有相同的点)组成的集合M称为图G的一个匹配。对于匹配M中的每条边e=uv,其两端点u和v称为被M所匹配,此时u和v称为是M饱和的。
- 最大匹配:图G中含边数最多的匹配,称为G的最大匹配。
- 完美匹配:如果G中的每个点都是M饱和的,那么M是G的完美匹配。
以下是匈牙利算法解决二分图匹配问题的实例:
第一步:
首先给左①钢铁侠进行匹配,发现第一个与其相连的右①还未匹配,将其匹配,连上一条蓝线。
第二步:
接着匹配左②,发现与其相连的第一个目标右②还未匹配,将其匹配
第三步:
接下来是左③,发现最优先的目标右①已经匹配完成了,怎么办呢?我们给之前右①的匹配对象左①分配另一个对象。(黄线代表这条线被临时拆掉)
可是此时左①匹配的第二个目标是右②,但右②已经有了匹配对象,怎么办呢?
我们再给之前右②的匹配对象分配另一个对象(可以发现这是一个递归的过程,和上面的步骤是一样的)
暂时断掉先前连接的两条线,那么左①,左②只能如下图蓝线匹配,左③就能匹配到右①
按照第三步的节奏我们没法给左④腾出来一个匹配对象,只能放弃对左4的匹配,匈牙利算法流程至此结束。蓝线就是我们最后的匹配结果。至此我们找到了这个二分图的一个最大匹配。最终的结果是我们匹配出了三对目标,由于候选的匹配目标中包含了许多错误的匹配红线(边),所以匹配准确率并不高。可见匈牙利算法对红线连接的准确率要求很高,也就是要求我们运动模型(Detection)、外观模型等部件必须进行较为精准的预测,或者预设较高的阈值,只将置信度较高的边才送入匈牙利算法进行匹配,这样才能得到较好的结果。