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


        匈牙利算法是由匈牙利数学家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 完美对应,则称为 完美匹配 ,完美匹配一定是最大匹配,而最大匹配不一定是完美匹配。匈牙利算法核心目标就是找到最大匹配了。
  • 相关阅读:
    linux环境下熟悉又陌生的sudo命令
    【蓝桥杯】赢球票(模拟、枚举、搜索)
    【CSS】使用 CSS 实现一个宽高自适应的正方形
    v-show和v-if指令的共同点和不同点
    数据结构与算法-队列
    SpringSecurity-基于微服务的认证与权限访问
    java+springboot+vue实验室预约设备管理系统python534
    Tomcat7集成链路追踪SkyWalking6.6版本
    汇编语言——王爽
    三、多线程
  • 原文地址:https://blog.csdn.net/m0_64007201/article/details/127415713