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


        匈牙利算法是由匈牙利数学家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 完美对应,则称为 完美匹配 ,完美匹配一定是最大匹配,而最大匹配不一定是完美匹配。匈牙利算法核心目标就是找到最大匹配了。
  • 相关阅读:
    数据分析思维(一)|信度与效度思维
    scaner 从外网到内网域渗透
    Apache Spark 的基本概念和在大数据分析中的应用
    2023年09月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试
    神经网络注意力机制可视化,人工神经网络可视化
    为什么把k8s比做操作系统:kubernetes与os的架构对比
    leetcode做题笔记173. 二叉搜索树迭代器
    卡尔曼滤波器的定义,实例和代码实现
    渗透测试-CSRF漏洞
    总结七大排序算法
  • 原文地址:https://blog.csdn.net/m0_64007201/article/details/127415713