算法笔记:匈牙利算法

news/2024/5/15 15:32:08/文章来源:https://blog.csdn.net/qq_40206371/article/details/130019201

1 二部图(二分图)

  • 二分图Bipartite graph)是一类特殊的,它可以被划分为两个部分,每个部分内的点互不相连。
    • 匈牙利算法主要用来解决两个问题:求二分图的最大匹配数最小点覆盖数

2 最大匹配问题

2.1 问题描述

  •  左右有两个点集,我们最多可以找到多少条没有公共端点的边?

2.2 匈牙利算法举例

  • 从B1开始,从G1~G4一个一个遍历过去
    • 首先遍历到和B1有连边的G2
    • 暂时把B1和G2连接
  • 接着看B2,也从G1~G4一个一个遍历过去

    • 首先遍历到和B2有连边的G2
    • 此时G2已经和左边的B1连接了
    • 于是倒回去看B1,看看B1有没有别的可以连接的选项
    • 发现B1在G2后还可以连接G4
    • ——>B2暂时连G2,B1暂时连G4
  • 接着看B3,首先B3会先遍历到G1
    • G没啥冲突
  • 最后看B4
    • B4遍历到G4
    • G4此时连着B1
      • B1没有别的可以连接的了
    • ——>B4没法连G4

 2.3        Python实现

2.3.1 数据和准备部分

# 左点-右点--邻接矩阵
ada_matrix=[[0,1,0,1],[0,1,0,0],[1,0,1,0],[0,0,0,1]]num_left=len(ada_matrix)
num_right=len(ada_matrix[0])right_pair=[-1]*num_right
#右点和哪个左点匹配了(一开始都是-1,表示没有匹配)

2.3.2 if_match 函数

  • 表示左点匹配到i的时候,根据right_visited的情况,左点i是否会匹配一个右点
  • right_visited表示匹配左点i的过程中,每个右点是否被考虑过
def if_match(i):global right_visitedfor j in range(num_right):if(ada_matrix[i][j]==1 and right_visited[j]==0):#如果右边的点和左边的点有连边;同时在考虑左点i的过程中,右点j没有被考虑过right_visited[j]=1if(right_pair[j]==-1):#如果左边的点现在还没有右边的点和他匹配,那么左点i和右点j连接right_pair[j]=ireturn True#左点遍历到i的时候,暂时可以匹配j(后续i点可能需要“改嫁”,但是如果只遍历到i,是不冲突的)elif(if_match(right_pair[j])):right_pair[j]=i#如果左边的点已经和别的点(right_pair[j])匹配了,那么看看(right_pair[j])能不能“改嫁”#也就是看看不能选择j的情况下,(right_pair[j])能不能匹配到其他的右点#这是一个递归过程,进行if_match(right_pair[j])的时候,假设匹配到新的右点j'#又需要判断j'是否有点和它匹配+如果匹配了,已经匹配的点能不能“改嫁”return True#左点遍历到i的时候,暂时可以匹配j(后续i点可能需要“改嫁”,但是如果只遍历到i,是不冲突的)return False                

2.3.3 主函数

for i in range(num_left):#每一个左边的点global right_visitedright_visited=[0]*num_right#在考虑左边的点i的时候,右边的点有没有被考虑过print(right_pair)if_match(i)'''
[-1, -1, -1, -1]
[-1, 0, -1, -1]
[-1, 1, -1, 0]
[2, 1, -1, 0]
'''

结果和前面的手动推导是一样的

3 最小点覆盖问题

  • 找到最少的一些,使二分图所有的边都至少有一个端点在这些点之中。
  • 倒过来说就是,删除包含这些点的边,可以删掉所有边
  • König定理:一个二分图中的最大匹配数等于这个图中的最小点覆盖数

参考内容:带你入门多目标跟踪(三)匈牙利算法&KM算法 - 知乎 (zhihu.com)

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C++笔记]初步了解STL,string,迭代器

STL简介 STL(standard template libaray-标准模板库): 是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构与算法的软件框架。 是一套功能强大的 C 模板类,提供了通用的模板类和函数,这些模板…

STM32开发(十二)STM32F103 功能应用 —— NTC 温度采集

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解(过程中相关问题点在第五点中做解释说明)五、知识点补充六、结果演示一、基础知识点 了解STM32 片内资源ADC。本实验是基于STM32F103开发 实现 NTC温度采集。 NTC温度采集…

3年外包离奇被裁,痛定思痛24K上岸字节跳动....

三年前,我刚刚从大学毕业,来到了一家外包公司工作。这份工作对于我来说是个好的起点,因为它让我接触到了真正的企业项目和实际的开发流程。但是,随着时间的流逝,我发现这份工作并没有给我带来足够的成长和挑战。 三年…

文心一言平替版ChatGLM本地部署(无需账号)!

今天用了一个超级好用的Chatgpt模型——ChatGLM,可以很方便的本地部署,而且效果嘎嘎好,经测试,效果基本可以平替内测版的文心一言。 目录 一、什么是ChatGLM? 二、本地部署 2.1 模型下载 2.2 模型部署 2.3 模型运…

数据结构系列13——排序(归并排序)

目录 1. 递归实现归并排序 1.1 思路 1.2 代码实现 1.3 时间复杂度和空间复杂度 2. 非递归实现归并排序 2.1 思路 2.2 代码实现 2.3 时间复杂度和空间复杂度 1. 递归实现归并排序 1.1 思路 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列…

Excel 文件 - 比如 .csv文件编码问题 转为 UTF-8 编码 方法,解决中文乱码问题 - 解决科学计数显示问题

解决 excel 文件编码问题 1、方法一: 有点点击 excel 文件,然后选择打开方式,选择使用 Excel 2016 软件打开 选择 工具 ——> Web 选项 这里选择 UTF-8 编码 2、方法二 wps 导出为 .csv 文件,然后修改 csv 文件的后缀…

Linux修改密码报错Authentication token manipulation error的终极解决方法

文章目录报错说明解决思路流程排查特殊权限有没有上锁查看根目录和关闭selinux/etc/pam.d/passwd文件/etc/pam.d/system-auth文件终极办法,手动定义密码passwd: Have exhausted maximum number of retries for servic、ssh用普通用户登录输入密码正确但是登录时却提…

元宇宙是什么,元宇宙虚拟会议改变会议体验

随着人类社会的发展和科技的进步,传统的会议方式已经无法满足现代社会的需求。为了更好地满足社会的需求,VR全景元宇宙虚拟会议是近年来快速崛起的新兴领域,其融合了虚拟现实技术和通信技术,为人们提供了一种全新的交流、协作和学…

【探花交友】day02—完善个人信息

目录 1、完善用户信息 1.1、阿里云OSS 1.2、百度人脸识别 1.3、保存用户信息 1.4、上传用户头像 2、用户信息管理 2.1、查询用户资料 2.2、更新用户资料 3、统一token处理 3.1、代码存在的问题 3.2、解决方案 3.3、代码实现 4、统一异常处理 4.1、解决方案 4.2、…

本地部署Stable Diffusion教程,亲测可以安装成功

系列文章目录 之后补充 文章目录系列文章目录前言一、Stable Diffusion是什么?二、安装前的准备1.检查自己的电脑配置是否符合要求2.下载安装Git3.下载安装Python三、下载stable-diffusion-webui仓库四、运行webui-user.bat总结前言 近期,智能AI绘画以其…

AndroidStudio第一步安装和配置环境

AndroidStudio第一步安装和配置环境 文章目录AndroidStudio第一步安装和配置环境1.环境变量2.PATH编辑3.cmd测试版本4.android studio设置4.1 保留压缩包4.2解压缩包4.3 设置本地4.4 Dependencies5.生成apk5.15.2 需要添加才能被手机安装6.Android studio安装包和gradle下载地址…

数据仓库工具箱-第6章-订单管理

文章目录重要专业名词含义一、订单管理总线矩阵二、订单事务2.1 事实表规范化2.2 日期维度(维度角色扮演)2.2.1 角色扮演与总线矩阵2.3 产品维度2.3.1 产品维度共同特征2.3.2 维度的层次结构2.3.3 规范化与反规范化2.4 客户维度2.4.1 单一维度表与多维度…

Maven核心概念

一、Maven基础知识 Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。 1、Maven模型 2、仓库分类 本地仓库:自己计算机上的一个目录中央仓库&a…

AR”将会成为“更加日常化的移动设备应用的一部分”吗

目录 1:AR是什么 2:AR给人类带来的贡献 3:人们在生活中可以遇到许多 AR 技术应用 4:AR 技术的未来发展的趋势: 大学主攻VR,从大一就对VR的知识,设备,已经所涉及的知识伴随我的整…

政务服务一网通办建设方案(ppt)

政务审批 – 设计思路 “互联网政务服务”平台主要由互联网政务服务门户、政务服务管理平台、业务办理系统、政务服务数据共享平台及硬件支撑平台五部分构成。平台建设以硬件支撑平台为基础,其他各平台之间的业务流、信息流通过数据共享平台实现数据互联互通。政务审…

冒泡排序(Java)

文章汇总归纳整理于:算法竞赛学习之路[Java版] 冒泡排序是交换排序中的一种所谓交换,是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。 默认排序后的数据,从小到大进行排列 冒泡排序的基本思想 从后往前&#xff08…

4年经验来面试20K的测试岗,连基础都不会,还不如招应届生

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试…

Java语言------图书馆管理系统(入门简略版)

目录 一.图书管理系统分析 1.1系统设计要求 1.2设计思路 二.操作代码的实现 2.1书架书籍代码实现 2.2用户操作代码实现 2.2.1增加书籍 2.2.2移除书籍 2.2.3查询书籍 2.2.4展示书架书籍信息 2.2.5借阅书籍代码 2.2.6归还图书代码 2.2.7退出系统 3.用户登录操作 四.主…

深度分析美光科技在人工智能领域“被忽视和低估”的投资机会

来源:猛兽财经 作者:猛兽财经 美光科技(MU)是全球第四大半导体公司,也是第三大动态随机存取存内存(DRAM)供应商。从从普通PC到数据中心等所有计算基础设施都需要美光科技的产品。 因此,随着全球继续进行数字化转型,美…

CentOS7操作系统离线安装docker

前言 有时候我们没有办法联网安装各种软件包,这时候就需要提前下载好所需要的包,然后把包上传到服务,在服务器上进行安装。 今天我们一起来探讨了在centos7操作系统上,安装docker。 专栏地址:容器管理 ,…