2023-04-11 无向图的匹配问题

news2025/11/9 6:38:26

无向图的匹配问题

之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想

1 最大匹配和完美匹配

二分图回顾

二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多二分图内容参考第4章 二分图相关

最大匹配和完全匹配的概念

  • 一旦在二分图中找到一条边是我们想要的匹配,那么这两个点在下面的匹配就不能再被访问了(类似相亲时两个人看对眼了,其他相亲的就不能掺和了)。
  • 在二分图中像上面那样的匹配最多有多少对就是最大匹配问题(类似一堆人去相亲,最多能成多少对)
  • 如果所有顶点都找到了自己的匹配,那么这个最大匹配就成了完全匹配(即一堆人去相亲,每个人在不干涉其他成功牵手的情侣前提下,都找到了自己心仪的对象)

    完全匹配一定是最大匹配,但是最大匹配不一定是完全匹配。
    匹配问题与二分图

2 无向图的最大匹配问题转化为有向图的最大流问题

所有边的容量都为1,最大流即为最大匹配数
无向图的最大匹配问题转化为有向图的最大流问题

3 实现二分图匹配算法

  • 实现代码
  • 测试代码

4 LeetCode LCP4.覆盖

题目分析

可以用黑白两种颜色覆盖栅格,两种颜色的格子可以看做二分图,则问题可以转换为二分图的最大匹配问题
转换为二分图问题

黑白块的坐标规律

坐标规律

代码实现

  • 代码实现

5 匈牙利算法:不借助有向图和网络流模型求解最大匹配问题

匈牙利算法的定义

下面的增广路径是指首尾都是非匹配点的路径,和上一章残量图中的增广路径不同
匈牙利算法总结

  • 1.在二分图中
  • 2.从左侧的一个非匹配点出发
  • 3.从右向左的边,永远走匹配边
  • 4.匹配边和非匹配边交替出现(称为交替路)
  • 5.终止与另外一个非匹配点(即增广路径首尾都是非匹配点)

    交替路和增广路径的区别:增广路径是起始点都是非匹配点的交替路。增广路径一定是交替路,但交替路不一定是增广路径

  • 6.有增广路径,意味着最大匹配数可以加1
  • 7.遍历完左侧所有尚未匹配的点,即找到最大匹配

总结:匈牙利算法就是对二分图左侧每个尚未匹配的点,不断地寻找可以增广的交替路的过程。

可以用前面的BFS来实现,不同的是来到二分图的右侧的点不需要寻路,代码中的那个队列只存储左边的顶点。

匈牙利算法距离模拟

  • 以下图为例.匹配即配对,相当于相亲中的一对人,一旦看对眼,别人就不能插足了
  • 每次匹配起始都是左侧->右侧。
  • 匈牙利算法的核心:对每条增广路径上顶点的匹配状态取反(非匹配边变匹配边,匹配边变非匹配边),则可以多得到一条匹配边,直到找到所有的匹配边。

匈牙利算法举例

  • 1.先把左侧的0开始,把0-4匹配到一起(匹配顶点标为蓝色代表已访问,匹配顶点之间的边标为红色)
  • 2.第1次找增广路径:
    • 再从左侧的1开始,访问到右侧的邻接点4
    • 4已经被访问,向左侧走4的匹配边4-0
    • 0仍然已经被访问,再向右侧访问0的邻接点即6
    • 6还未被匹配,所以找到增广路径1-4-0-6

    第1次找增广路径

  • 3.第1次用匈牙利算法:对增广路径1-4-0-6匹配状态取反,即1-4变为一对匹配、0-6变成一对匹配。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKk1Rdbk-1681225850414)(https://img2023.cnblogs.com/blog/824694/202304/824694-20230411230853435-1686292205.png)]

  • 4.第2次找增广路径:
    • 再从左侧的2开始,先访问到邻接点6
    • 6已经被访问,向左走6的匹配变6-0
    • 0为左侧的顶点,所以0继续向右遍历0的邻接点4
    • 4已经被访问,向左走4的匹配4-1,
    • 1在左侧,需要继续向右访问1的邻接点7
    • 7还未被访问,所以我们找到第2条增广路径2-6-0-4-1-7

    第2次找到增广路径

  • 5.第2次用匈牙利算法:对增广路径2-6-0-4-1-7匹配状态取反,即2-6变为一对匹配、0-4变成一对匹配、1-7变成一对匹配

    匈牙利算法第2次应用

  • 6.第3次找增广路径:从左侧顶点3出发,向右找3的邻接点5,5未被访问,3-5就是一条增广路径
  • 7.第3次用匈牙利算法:把3-5的匹配状态取反,则3-5变成一对匹配边。

    匈牙利算法第3次应用

  • 8.至此所有的顶点都已被访问,找到最大匹配完成(即2-6变为一对匹配、0-4变成一对匹配、1-7变成一对匹配、3-5变成一对匹配,一共4对匹配)

起始点从左侧的其他店开始,结果是一样地,自己可以模拟下

6 匈牙利算法(Hungarian[hʌŋˈɡeriən])的BFS实现

  • 实现代码
  • 测试代码
  • 本节的算法求解第4节的多米诺骨牌问题

7 匈牙利算法(Hungarian[hʌŋˈɡeriən])的DFS实现

  • 实现代码
  • 测试代码
  • 使用基于DFS的匈牙利算法重新实现LeetCodeLCP4覆盖问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行数字化转型导师坚鹏:金融科技与数字化转型成功案例

金融科技与数字化转型成功案例课程背景: 数字化转型背景下,很多银行存在以下问题: 不清楚金融科技如何赋能数字化转型? 不清楚银行金融科技体系的建设情况? 不了解银行数字化转型标杆成功案例? 课程特色…

AD六层板布线经验累积

目录 1、布局: 2、创建电源类PWR 3、高速部分可以加屏蔽罩, 4、EMMC和NANDFLASH采取兼容放置(创建联合) 5、HDMI设计 6、就近原则摆放 7、AV端口 8、模拟信号(1字型或L型走线) 9、WIFI模块 10、局…

Python+ChatGPT实战之进行游戏运营数据分析

文章目录一、数据二、目标三、解决方案1. DAU2. 用户等级分布3. 付费率4. 收入情况5. 付费用户的ARPU最近ChatGPT蛮火的,今天试着让ta写了一篇数据分析实战案例,大家来评价一下!一、数据 您的团队已经为您提供了一些游戏数据,包括…

考研数二第十七讲 反常积分与反常积分之欧拉-泊松(Euler-Poisson)积分

反常积分 反常积分又叫广义积分,是对普通定积分的推广,指含有无穷上限/下限,或者被积函数含有瑕点的积分,前者称为无穷限广义积分,后者称为瑕积分(又称无界函数的反常积分)。 含有无穷上限/下…

基于粒子群优化算法的分布式电源选址与定容【多目标优化】【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

接口自动化测试面试常问的题目及答案,你都会了吗?

目录 前言 接口自动化测试的优势是什么? 你使用过哪些接口自动化测试工具? 你如何设计一个接口自动化测试用例? 接口自动化测试中常见的测试类型有哪些? 你如何解决接口自动化测试中遇到的问题? 如何进行接口自动…

专属大模型来了!还有ECS降价40%、50款产品免费试用|阿里云峰会亮点一览

4 月 11 日,阿里巴巴集团董事会主席兼 CEO、阿里云智能集团 CEO 张勇在云峰会上表示,阿里巴巴所有产品未来将接入“通义千问”大模型,进行全面改造。 自 2019 年起,阿里即开始进行大模型研究,并在近期推出阶段性的研究…

Google Play 政策更新 | 2023 年 4 月

我们一如既往地努力让 Google Play 成为值得开发者和用户信赖的安全平台,欢迎您通过 Google Play PolicyBytes 中文视频了解本次政策更新的具体内容,更及时更清晰地掌握 Google Play 最新政策。△ Google Play 政策更新 | 2023 年 4 月Bilibili 视频链接…

ch03-PyTorch模型搭建

ch03-PyTorch模型搭建0.引言1.模型创建步骤与 nn.Module1.1. 网络模型的创建步骤1.2. nn.Module1.3. 总结2.模型容器与 AlexNet 构建2.1. 模型容器2.1.1.nn.Sequential2.1.2.nn.ModuleList2.1.3.nn.ModuleDict2.2. AlexNet 构建2.3. 总结3.nn 网络层:卷积层3.1. 1d/…

图像语义分割与目标检测概述

在计算机视觉领域,不仅有图像分类的任务,还有很多更复杂的任务,如对图像中的目标进行检测和识别,对图像进行实例分割和语义分割等。其中在基于卷积神经网络的深度学习算法出现后,图像的语义分割和目标检测的精度也有了质的提升。 …

绘制ROC曲线及P-R曲线

绘制ROC曲线及P-R曲线 描述 ROC曲线(Receiver Operating Characteristic Curve)以假正率(FPR)为X轴、真正率(TPR)为y轴。曲线越靠左上方说明模型性能越好,反之越差。ROC曲线下方的面积叫做AUC…

视频动态库测试及心得

视频动态库测试及心得 这几天一直在弄动态库测试,h给的写好的动态库--预处理模块的库。视频处理项目一部分,需要连接实际情况测试。 需求: 1.把实际相机连接到,并读取实时数据流,保存到双循环链表里面; 2.测试背景建模…

wsl安装torch_geometric

在官网选择需要的版本 选择安装途径,选择runfile 执行第一行,会下载一个文件到目录下 需要降低C的版本,否则 执行sudo sh cuda_11.1.0_455.23.05_linux.run,会出现 查看对应的文件,会有 可以加上override参数之后,…

了解 WAIT_ABANDONED 返回值的重要性

互斥锁(Mutex)和其他同步对象之间的重要区别之一是:互斥锁具有所有者。如果拥有互斥锁的线程退出而没有释放互斥锁,则互斥锁会自动释放。 但如果发生这种情况,你就有大麻烦了。 许多人忽略的一件事是同步函数(如 WaitForSingleO…

如何写一个优质高效的网络项目实施方案?这篇文章值得收藏!

随着互联网技术的不断发展,网络项目的实施成为了许多企业和组织的重要任务。网络项目实施方案是指在进行网络项目实施时,为了保障项目的顺利进行,达到项目目标和交付要求,所制定的详细计划和操作指南。一个好的网络项目实施方案对…

数据结构 - 快排 | C

目录快速排序①hoare版本思路分析代码实现时间复杂度<整体优化><局部优化>②挖坑法思路分析代码实现③前后指针法思路分析代码实现④非递归快排思路分析代码实现以上代码汇总快速排序 ①hoare版本 思路分析 以上图为例&#xff1a; 指定一个数为a[key] 6&#x…

使用大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据

记录一下使用Java的SpringBoot大华SDK在智慧公厕项目中使大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据 首先根据说明书登录摄像头&#xff0c;一般摄像头都有自己的账号和密码(可能是admin admin 也可能是admin 888888 还有可能是admin 12345)&#xff0c;…

VMware ESXi 7.0 U3l Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

ESXi 7 U3 标准版集成 Intel 网卡、USB 网卡 和 NVMe 驱动 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-sysin/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2023-03-31&#xff0c;发布 ESXi 7.0U…

C++轻量级Web服务器TinyWebServer源码分析之log篇

文章目录log日志篇简介一、日志类的定义与使用二、单例模式与阻塞队列的定义1、单例模式2、阻塞队列log日志篇简介 使用单例模式创建日志系统&#xff0c;对服务器运行状态、错误信息和访问数据进行记录&#xff0c;该系统可以实现按天分类&#xff0c;超行分类功能。其中异步…

RabbitMq图形界面创建队列操作步骤及控制台使用说明

版本&#xff1a;RabbitMQ 3.9.7 控台台访问路径&#xff1a; http://localhost:15672/#/queues 使用控制台创建队列 登录 创建队列 &#xff08;1&#xff09;输入自定义的队列名称 &#xff08;2&#xff09;其他输入参数为默认值即可 &#xff08;3&#xff09;点击【Add…