二部图系列视频

关于匈牙利匹配可以联系下面两篇博客更容易理解和补盲:
带你入门多目标跟踪(三)匈牙利算法&KM算法
趣写算法系列之–匈牙利算法

14.1 二部图

广度优先搜索
广度优先,可以使用队列来操作:

  • 依次遍历节点,首先遍历第一个节点A,判断节点A是否遍历过,如果节点A没有遍历过,就把节点A添加进队列。
  • 然后取出队列中的第一个元素A,对于和节点A连接的某节点B和节点C等,把节点B和c进行标记(标记就是根据题目的具体要求进行操作,即你的目的是什么你就干什么),并且如果节点B和c没有遍历过,那么把节点B和C添加进队列。
  • 然后再取出队列中的第一个元素,就是节点B,遍历到了B节点,再对和B节点连接的节点D进行标记,并且判断D是否遍历过,没有遍历过的话就添加到队列。
  • 然后再取出队列第一个元素,为节点C。以此类推

14.2 无权二部图的最大匹配,最大流问题,其中有个网络最大流方法,贪心算法找最大匹配可能会失败。
贪心算法,每次局部最优,得到全局最优。
例如,每次只能从钱箱子里面取一张钞票,那肯定是每次都拿里面面值最大的一张,这样就会得到最优结果。
无权二部图的每条边权重都是一样的,为1。无权并不是说权重为0。

14.3有权二部图的最大匹配和最小匹配,把图边制作一个邻接矩阵。我们的目标是寻找权重之和最大的匹配。最大匹配限制条件:每一个节点都只能拥有一条边。注意,二部图并不是每个节点只有一条边。
以宠物收养为例,有权二部图的边的权重表示人对宠物的喜好程度,没有边表示喜好程度是0,也就是完全不喜欢。
宠物收养机构应该寻找有权二部图中的最大匹配。最大匹配,意味着让人领养最喜欢的宠物,获得最大的幸福感。

对于有权图,最大匹配和最小匹配是可以相互转化的。只需要把所有权重乘以−1\color{blue}-1−1全都变为负数即可。即,本来求最大值,最大值乘以 −1\color{blue}-1−1 就变成了最小值了。

最大匹配是最优匹配,即所有匹配权重之和(函数值)最大。
最小匹配也是最优匹配,即所有匹配权重之和(函数值)最小。

  • 最大匹配可以理解为人对物体的喜好程度,每个人对分配给他的物体的喜好的和值最大的匹配对,就是最大匹配;
  • 最小匹配可以理解为两种物体的差异,所有物体差异的和值最小,就是最小匹配。

匈牙利算法用来寻找有权二部图中的最小匹配。但是匈牙利匹配中有一个限制,就是两个集合中的节点数都一样为n,即邻接矩阵必须是一个 n∗n\color{blue}n*nn∗n 的方阵。匈牙利算法的时间复杂度是 n3\color{blue}n^3n3。

问:匈牙利算法的输入必须要是方阵吗,也就是左右数目一样吗?

答:匈牙利算法不需要,KM算法必须得是完全匹配(可以补权值为零的边得到)。
但是在自动驾驶中,一般直接用匈牙利算法代指KM算法,里面调用的就是KM算法。
所以,自动驾驶中指代额匈牙利算法,是一个方阵n*n。如果有一条边权值为0,就表示二者没有边。
所以,如果匈牙利算法+KM算法最终得到的二者匹配的一对,如果边的权重为0,就表示不匹配。并不表示强行把二者给匹配起来。

匈牙利算法是解决最小匹配的问题,但是我们实际问题如果是要求最大匹配,应该怎么办呢?我们可以把最大匹配等价转换为最小匹配,即,把权重全部取反,这样就把喜爱程度变成厌恶程度了,然后再调用匈牙利算法即可。
最小匹配的理解就是幸福度最低,我们最开始是+10\color{blue}+10+10,表示特别喜欢某只宠物,取负数就变成了特别不喜欢这只宠物,如果每个人都分配到了最最不喜欢的宠物,那么就是最小匹配。所以最小匹配并不是说被领养的宠物最少,而是最差匹配。最大匹配应该理解为最优匹配,最小匹配应该理解为最差匹配。

不过,不要狭隘的理解最大匹配和最小匹配的匹配结果是一样的。因为最大匹配是权值之和最大的匹配,而最小匹配是权值之和最小的匹配。两个集合中,最大匹配和最小匹配肯定不会是同一种匹配结果。前面介绍的最大匹配和最小匹配的互相转化,最终的匹配结果是同一种,只不过因为最小化更容易求解,例如匈牙利匹配就是根据寻找权重之和的最小值来求解问题的。

【14-4: 匈牙利算法 Hungarian Algorithm-哔哩哔哩】

匈牙利算法只需要操作邻接矩阵

最大匹配并不唯一,可能有多种匹配方式都能达到同样幸福度。

14.6 稳定婚配问题
Gale-shapley解决稳定婚配问题。就是n\color{blue}nn个男人分别对n\color{blue}nn个女人进行爱慕程度排序,n\color{blue}nn个女人也分别对n\color{blue}nn个男人进行爱慕程度排序。
每个男性都首先选择最喜欢的女性,如果女性的爱慕程度的最优选择不是你,你就划掉该女性,下次匹配不会再考虑她,然后你再选择你第二爱慕的女性,直到配对成功。并且每次匹配之后,依旧单身的男性先选择女性,无论女性是否已配对,可以挖墙脚,把已配对的男性变成单身。直到最后所有男人配对成功(此时所有女人也会配对成功)。

【数学与算法】二部图、匈牙利匹配、稳定婚配相关推荐

  1. 摄像头与激光雷达微波雷达的融合算法之五----匈牙利匹配

    前言 在做自动驾驶的过程中,很常见的一个问题就是,你拥有摄像头的数据,也拥有雷达数据,这时候要怎么融合呢? 这时候我们想到了常见的多目标匹配算法:匈牙利算法和KM算法,因为匈牙利算法是没有带权重的,而 ...

  2. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  3. 匈牙利匹配、KM算法、卡尔曼滤波、SORT/deep SORT

    匈牙利匹配.KM算法 带你入门多目标跟踪(三)匈牙利算法&KM算法 - 知乎 卡尔曼滤波: 图像处理之目标跟踪(一)之卡尔曼kalman滤波跟踪(主要为知识梳理)(转载)_coming_is_ ...

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

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出.匈牙利算法是基于Hall定理中充分性证明的思想,它是二分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的 ...

  5. 稳定婚配问题的所有可能解

    前言: 前不久被要求写一个关于稳定婚配问题的算法,稳定婚配是一个很经典的问题,这里我就不多去描述他了,你在网上能找到一堆.解决稳定婚配问题的一个著名算法是G-S算法,也叫延迟认可算法,具体不再描述.此 ...

  6. 目标跟踪:Deepsort--卡尔曼滤波、匈牙利匹配、马氏距离、欧氏距离、级联匹配、reid

    本篇文章供自己学习回顾,其中错误希望指出! 先把目标跟踪中涉及到的名词抛出来: 1.卡尔曼滤波. 2.匈牙利匹配:https://blog.csdn.net/DeepCBW/article/detai ...

  7. 数学建模算法学习笔记 已完结

    这是为了准备国赛突击学习的模型算法,我在原有的基础上加上自己的理解虽然不知道对不对,就是为了记录下自己学的模型他究竟是个什么东西,语言通俗,但是极不准确,只适合做一个大概的了解,建议大家详细的还是要看 ...

  8. KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home

    最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大.解决这个问题可以用KM算法.理解KM算法需要首先理解"可行顶标"的概念.可行顶标是指关于二分图 ...

  9. 数学建模算法与应用学习day1——线性规划问题整数规划问题

    以下内容来自司守奎编写的数学建模算法与应用学习,主要是记录自己的学习历程,转载还请标明出处! 一.线性规划 知识点 1.1线性规划问题 1.1.2线性规划解的概念 f = [-2 ; -3 ; 5]; ...

最新文章

  1. 【深度学习理论】(1) 损失函数
  2. python捕获异常后处理_python异常捕获处理
  3. [转]学习如何使用 Cookie 编程
  4. 《数学之美》第27章 期望最大化算法
  5. vue笔记(四)注册组件,路由,vuex
  6. Spring整合RabbitMQ
  7. Spark的event事件监听器LiveListenerBus和特质SparkListenerBus以及特质ListenerBus
  8. Python 读写matlab中.mat文件
  9. python+gensim︱jieba分词、词袋doc2bow、TFIDF文本挖掘
  10. 2021年认证杯SPSSPRO杯数学建模B题(第一阶段)依巴谷星表中的毕星团求解全过程文档及程序
  11. springmvc 银联商家向用户转账
  12. html圆圈里面有歌词,html5+js带滚动歌词的音乐播放器(同时支持列表,json) | 小灰灰博客...
  13. 【视频编码】【Vue】【明星开源项目】| Chat · 预告
  14. 万字实录:从DDCTF大赛看当前网络安全新趋势 | 硬创公开课总结文+视频(上篇)...
  15. Crypto one-time-pad
  16. Testflight上架丨苹果官方内测渠道详解
  17. Jep java表达式分析器
  18. Jenkins使用入门笔记
  19. 10#Windows注册表的那些事儿
  20. SpringBoot+Vue项目在线学习网站

热门文章

  1. Python学习前期准备---第九天
  2. lucene源码分析(3)facet实例
  3. 7 Java Performance Metrics to Watch After a Major Release--转
  4. 用C语言实现Ping程序功能---转
  5. 《高性能网站构建实战》 目录--转
  6. 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试
  7. Java 8 - Lambda从兴趣盎然到索然无味
  8. JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系
  9. Android Design Support Library初探-更新中
  10. oracle测试表什么名字,Oracle_PLSQL测试题与答案(绝对经典)