当前位置: 首页 > article >正文

2分图匹配算法

定义

在这里插入图片描述

  • 节点u直接无边,v之间无边,边只存在uv之间。
  • 判断方法:BFS染色法,全部染色后,相邻边不同色

无权二部图中的最大匹配

  • 最大匹配即每一个都匹配上min(u, v)。
  • 贪心算法可能导致,有些节点未匹配上
  • 可以添加起始节点以及终止节点,使用网络流算法进行求解。

在这里插入图片描述

有权二部图中的最大匹配Maximum-Weight Bipartite Matching

  • 每一条边都有权重,最大匹配追求的是整体的权重和最大。(整体收益最大)
  • 最大匹配可以转化为最小匹配算法。即把权重*-1, 最小匹配的结果就是最大匹配的结果。
  • 匈牙利算法可以解决最小匹配问题,但是u和v的节点数量需要保持一致,算法复杂度为O(n^3),暴力为O(n!)

匈牙利算法

  • 构建u*u矩阵,没有边的为0

  • 每一行减去每一行的最小值
    在这里插入图片描述

  • 每一列减去每一列的最小值
    在这里插入图片描述

  • 使用最小的线覆盖所有的0。如果线的数量小于u的数量,则剩下的继续找最小元素,然后递减,节点处加上该元素;如果数量相同,则优先找唯一有0的点进行匹配。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 最大匹配结果可能不止1中,如5,2,3和5, 0, 5都是15。
    在这里插入图片描述

在这里插入图片描述

  • 如果uv节点不一致,可以通过补几个虚拟节点,权重设置为0,使得uv节点数量一致,那就可以用匈牙利算法求解了。

稳定婚配算法

  • 一种特殊的2分图匹配问题
  • 边由权重变成了顺序,而且是双向的
  • 可以用gale-shapely算法求解
  • 时间复杂度为O(n^2)

代码实现

  • 通过找增广路径的方式进行求解
  • 非匹配点出发,到非匹配点截至,中间为非匹配与匹配交替出现,然后变换状态即可。
  • KM算法是加了权重的匈牙利算法,先把左边赋值最大权重,然后如果冲突,左边-detla, 右边+detla的操作,再通过增广路径求解。detla为lx+ly-weight
    https://blog.csdn.net/sidnee/article/details/106298615

https://blog.csdn.net/qq_37457202/article/details/80161274

参考:
https://www.bilibili.com/video/BV1G54y157HA/?spm_id_from=333.788&vd_source=d141bc07699831d8053b781fd6944d5f


http://www.kler.cn/a/152103.html

相关文章:

  • web:catcat-new(文件包含漏洞、flask_session伪造)
  • 和鲸科技与国科环宇建立战略合作伙伴关系,以软硬件一体化解决方案促进科技创新
  • 在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问
  • C#常见的设计模式-创建型模式
  • sql中的left join, right join 和inner join,union 与union all的用法
  • Redis未授权访问-CNVD-2019-21763复现
  • python+pytest接口自动化(5)-requests发送post请求
  • 运行启动vue项目报报错node: --openssl-legacy-provider is not allowed in NODE_OPTIONS解决
  • 二、shell编程快速入门
  • 7.23 SpringBoot项目实战【评论】
  • 嵌入式硬件基础知识——1
  • golang 集成logrus日志框架
  • 微服务实战系列之Nginx(技巧篇)
  • AI落地现状:没有mission、业务零碎、连2B还是2C都在摇摆
  • 制造企业建设数字工厂管理系统的难点主要有哪些
  • qt 5.15.2 的编译部署quazip-0.7.3项目过程
  • JSP+servlet实现高校社团管理系统
  • Intellij IDEA 的安装和使用以及配置
  • 免费WordPress站群插件-批量管理站群的免费软件
  • Redis核心数据结构