匈牙利算法解决二分图匹配问题

    匈牙利算法是由匈牙利数学家Edmonds1965年提出。匈牙利算法是基于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)、外观模型等部件必须进行较为精准的预测,或者预设较高的阈值,只将置信度较高的边才送入匈牙利算法进行匹配,这样才能得到较好的结果。

总结:
    匈牙利算法得到的最大匹配并不是唯一的,预设匹配边、或者 匹配顺序 不同等,都可能会导致有多种最大匹配情况。假如Detection 训练很好,经过匈牙利算法能够把人物与 ID 完美对应,则称为 完美匹配 ,完美匹配一定是最大匹配,而最大匹配不一定是完美匹配。匈牙利算法核心目标就是找到最大匹配了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值