匈牙利算法

2023-10-28

趣写算法系列之--匈牙利算法

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

-------等等,看得头大?那么请看下面的版本:

通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感(-_-||暂时不考虑特殊的性取向),如果一对男女互有好感,那么你就可以把这一对撮合在一起,现在让我们无视掉所有的单相思(好忧伤的感觉),你拥有的大概就是下面这样一张关系图,每一条连线都表示互有好感。


本着救人一命,胜造七级浮屠的原则,你想要尽可能地撮合更多的情侣,匈牙利算法的工作模式会教你这样做:

===============================================================================

一: 先试着给1号男生找妹子,发现第一个和他相连的1号女生还名花无主,got it,连上一条蓝线

===============================================================================

二:接着给2号男生找妹子,发现第一个和他相连的2号女生名花无主,got it

===============================================================================

三:接下来是3号男生,很遗憾1号女生已经有主了,怎么办呢?

我们试着给之前1号女生匹配的男生(也就是1号男生)另外分配一个妹子。

(黄色表示这条边被临时拆掉)

与1号男生相连的第二个女生是2号女生,但是2号女生也有主了,怎么办呢?我们再试着给2号女生的原配()重新找个妹子(注意这个步骤和上面是一样的,这是一个递归的过程)


此时发现2号男生还能找到3号女生,那么之前的问题迎刃而解了,回溯回去

2号男生可以找3号妹子~~~                  1号男生可以找2号妹子了~~~                3号男生可以找1号妹子

所以第三步最后的结果就是:

===============================================================================

四: 接下来是4号男生,很遗憾,按照第三步的节奏我们没法给4号男生腾出来一个妹子,我们实在是无能为力了……香吉士同学走好。

===============================================================================

这就是匈牙利算法的流程,其中找妹子是个递归的过程,最最关键的字就是“腾”字
其原则大概是:有机会上,没机会创造机会也要上

【code】

bool find(int x){
    int i,j;
    for (j=1;j<=m;j++){    //扫描每个妹子
        if (line[x][j]==true && used[j]==false)      
        //如果有暧昧并且还没有标记过(这里标记的意思是这次查找曾试图改变过该妹子的归属问题,但是没有成功,所以就不用瞎费工夫了)
        {
            used[j]=1;
            if (girl[j]==0 || find(girl[j])) { 
                //名花无主或者能腾出个位置来,这里使用递归
                girl[j]=x;
                return true;
            }
        }
    }
    return false;
}
在主程序我们这样做:每一步相当于我们上面描述的一二三四中的一步

for (i=1;i<=n;i++)
{
    memset(used,0,sizeof(used));    //这个在每一步中清空
    if find(i) all+=1;
}
————————————————
版权声明:本文为CSDN博主「Dark_Scope」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Dark_Scope/article/details/8880547

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匈牙利算法 的相关文章

  • surf特征原理

    前言 也许我们使用过Uiautomator编写过自动化测试脚本 也许我们也使用过Monkey来测试过应用的稳定性 但在使用过程中总觉得有或多或小的问题 用Uiautomator写脚本 总觉得有时候控件没法识别 用Monkey来进行稳定性测试
  • 你应该掌握的七种回归技术

    摘要 本文解释了回归分析及其优势 重点总结了应该掌握的线性回归 逻辑回归 多项式回归 逐步回归 岭回归 套索回归 ElasticNet回归等七种最常用的回归技术及其关键要素 最后介绍了选择正确的回归模型的关键因素 编者按 回归分析是建模和分
  • A卡和N卡

    NVIDIA 全称为NVIDIA Corporation NASDAQ NVDA 官方中文名称英伟达 A卡 AMD的卡 N卡 英伟达的卡 DirectXDirectCompute对手是OpenGL opencl 对手是cuda AMD的卡特
  • 色温

    色温是表示光线中包含颜色成分的一个计量单位 从理论上说 黑体温度指绝对黑体从绝对零度 273 开始加温后所呈现的颜色 黑体在受热后 逐渐由黑变红 转黄 发白 最后发出蓝色光 当加热到一定的温度 黑体发出的光所含的光谱成分 就称为这一温度下的
  • 理解图像卷积操作的意义

    参考 http blog csdn net chaipp0607 article details 72236892 locationNum 9 fps 1 理解图像卷积操作的意义 标签 图像处理图像卷积 2017 05 16 22 40 4
  • 匈牙利算法

    趣写算法系列之 匈牙利算法 匈牙利算法是由匈牙利数学家Edmonds于1965年提出 因而得名 匈牙利算法是基于Hall定理中充分性证明的思想 它是部图匹配最常见的算法 该算法的核心就是寻找增广路径 它是一种用增广路径求二分图最大匹配的算法
  • 时域和空域和频域

    傅立叶变换是f t 乘以正弦项的展开 正弦项的频率由u 其实是miu 的值决定 因为积分后左边剩下的为一变量是频率 所以我们说傅立叶变换域是频率域 数字图像处理 冈萨雷斯 中文第三版P128 当变量t用于说明图像时 我们一般将变量t的域称为
  • 圆检测学习笔记

    目录 边缘检测 再检测圆 霍夫圆检测 转自 深度OpenCV开发之精准找圆 GitHub zikai1 CircleDetection circle detection inscribed triangles image processin
  • cnn图像质量评价

    参考 https blog csdn net moxibingdao article details 107096783 上面左图为原图 中间为经过JPEG2000压缩后的图 右图为高斯模糊后的图 从清晰度来讲 肯定第一幅图质量更高 质量评
  • 人像抠图学习笔记

    目录 人脸分割BiseNetV2 u2net 人脸分割BiseNetV2 宣传的 BiSeNet V2出来了 72 6 的mIOU 156FPS的速度 让分割飞起来 模型30多m TensorFlow平台的 cpu版时间80ms 人脸抠图
  • FastDFS安装与配置

    FastDFS安装与配置 简介 FastDFS是一个开源的轻量级分布式文件系统 它对文件进行管理 功能包括 文件存储 文件同步 文件访问 文件上传 文件下载 等 解决了大容量存储和负载均衡的问题 特别适合以文件为载体的在线服务 如相册网站
  • pww区域连接特征提取算法

    主题思想 任何一个图像 肯定由多个或一个区域 每个区域在横向扫描时 会有分裂和合并 比如圆环 顶部有一个分裂点 底部有一个合并点 没有分裂合并的图形 就是简单的凸图像 很容易通过外形识别 而复杂的图像 就是凹的 就需要分裂合并点来识别 旋转
  • 3d指向检测 ros_3d_pointing_detection

    Introduction The workflow of this project is Detect 2D human joints from color image by Openpose Compute 3D human joints
  • mediapipe face_mesh测试

    目录 onnx测试 tensorflow预测tflite代码 onnx测试 img path r D data val result 1212 test 1 2 02370 1 jpg img path r D data face 1212
  • 深度学习 图像融合使用笔记 2023 harmonized

    目录 cvpr2023 INR Harmonization即将开源 CDTnet没开源 DCCF 图像滤镜 变色 pil灰度图转opencv
  • opencv光流Optical Flow

    光流Optical Flow 现在四轴飞行器越来越火 如何在室内进行定位呢 不同于传统四轴的姿态控制 电机驱动 室外定位 都有了一套完整的方案 室内定位还是没有完全成熟 目前大四轴可以利用的GPS定高 小四轴比较成熟的也就是光流方案了 先看
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi
  • vlfeat 特征检测

    https blog csdn net wangxinsheng0901 article details 79676081 https github com dougalsutherland vlfeat ctypes
  • 特征值和特征向量的几何和物理意义

    原文 http blog 163 com renguangqian 126 blog static 1624014002011711114526759 FUCk 相见很晚 如果大学期间遇到这样的文章 线代必须90分以上 特征值和特征向量的几
  • 无法解析的外部符号 “public: __cdecl nvinfer1::YoloPluginCreator::YoloPluginCreator

    无法解析的外部符号 public cdecl nvinfer1 YoloPluginCreator YoloPluginCreator 解决方法1 不选择c 项目 而选择建一个nvidia runtime项目 自动就带有了 解决方法2 在V

随机推荐

  • LeetCode-18-四数之和

    18 四数之和 说明 给定一个包含 n 个整数的数组 nums 和一个目标值 target 判断 nums 中是否存在四个元素 a b c 和 d 使得 a b c d 的值与 target 相等 找出所有满足条件且不重复的四元组 注意 答
  • java代码实现百度网盘文件上传返回下载链接-已封装工具类!可用于maven,spring-boot,spring-boot-cloud等项目,以及思路全解!

    阿丹 查找晚上很多案例都出现各种问题所以专门出一篇文章 因为业务涉及到需要较大的内存空间 使用oss以及fastdfs来说一个对金钱需求太大 fastdfs对服务器的损耗太大 于是寻找第三方 百度网盘相对来说就不错 本文章集合百度官方文档
  • Mask Rcnn目标分割-项目搭建及跑通测试代码

    本文介绍了Mask Rcnn目标分割项目的搭建及运行过程 并对搭建过程中可能出现的问题进行了解答 环境 Cuda10 2 tensorflow gpu1 13 2 Mask R CNN是一个实例分割算法 可以用来做 目标检测 目标实例分割
  • ipad能不能写python_如何在ipad上写python

    ipad或者手机支持python代码编写 让我们再也不用一本正经待在办公室或者家里正襟危坐了 让我们编写代码的方式更加随意 当我们写一些轻量级的代码可以随时随地的进行 那么如何在ipad上写python代码呢 这里给大家推荐两款应用于不同平
  • 区块链技术的本质是分布式数据库

    当微服务撞上区块链 系列微课分为 1 区块链的业务价值是通过数据共享降低信任成本 2 区块链的本质是分布式数据库 本文 3 区块链与微服务是天生的一对 转载本文需注明出处 微信公众号EAWorld 违者必究 区块链技术是基于比特币应用提出的
  • anaconda使用系列教程--4)环境迁移

    概述 跨平台尽量避免 比如windows和linux就不要跨平台 就在linux之间跨还是可以的 直接copy整体环境文件 适合于无法联网或网速不佳的新环境 anaconda最好是同版本的 迁移方法 使用requirement文件 A机器
  • pytorch 目标检测数据处理(二)提取困难样本,低ap样本

    摘要 比赛当中数据处理有很多种 对图像数据的分析 和分析之后该如何加强比较低的ap类别 今天就讲解我最近使用的几种困难样本学习和专注低ap的数据增强后的处理 困难样本就是loss比较大的 在每一个批次训练当中都占有很大部分的loss 导致l
  • 蓝牙之五-bludroid协议栈和厂商代码的交互

    协议栈和厂商代码交互 完整的蓝牙调用图 协议栈所在的目录是 system bt 厂商代码所在的目录是hardware broadcom libbt 这两个不同的目录反应的是协议栈和厂商固件的交互流程 它们通过hci层进行交互 在bluez时
  • SCWS分词库自定义

    最近因为要进行搜索功能的实现 而实现搜索给用户一个更好的体验就需要对输入的内容进行分词 所以静下心来 好好看看分词的知识 并记录下来 还是很有必要的 今天主要做了写关于SCWS的分词的词库的一些了解学习 首先就是需要知道SCWS这个分词的词
  • XSSLabs Less1-10

    Xsslabs下载地址 https github com do0dl3 xss labs Less 1 常规插入语句 把test的值改成跨站脚本语句即可name Less 2 gt 闭合前面的语句
  • 代理IP和Socks5代理:跨界电商与全球爬虫的关键技术

    跨界电商在全球化市场中崭露头角 而代理IP和Socks5代理则成为实现全球市场洞察和数据采集的不可或缺的工具 本文将深入探讨这两种代理技术在跨界电商 爬虫技术和出海战略中的关键作用 引言 介绍跨界电商的崛起和全球市场的机遇与挑战 引出代理I
  • 说句“圣诞快乐”不容易!

    1 圣诞快乐 嘿 别以为我们这里都是基督教徒 2 哦 好吧 光明节快乐 犹太教节日 宽扎节快乐 非裔美国人的节日 3 那些节日到了吗 4 好吧 只能说节日快乐了 别说 快乐 抑郁的人伤不起
  • Python对接LDAP/AD的过程详解

    不同公司的 LDAP AD 服务配置各不相同 很难封装一个通用的方法 所以我们在对接 LDAP AD 的过程中 需要了解自己公司的 LDAP AD 服务配置是怎么样的 才能写出正确的对接代码 因此下面将拆解过程并提供相关的文档地址 首先需要
  • 从源码角度分析RabbitMQ重启后,消费者停止消费怎么解决

    前段时间的RabbitMQ broker服务端由于某个队列一直积压消息 运维在凌晨对mq服务端机器pod进行了扩容 重启了RabbitMQ 然后早上发现自己的服务在mq重启之后一直报异常 停止消费了 导致影响了业务的运行 虽然mq重启成功了
  • 服务器虚拟化设计与实现拓扑图,VMware服务器虚拟化解决具体技术方案(详细).doc...

    文档介绍 虚拟化解决方案 目 录 一 V ware解决方案概述 3 1 VMw re服务器整合解决方案 3 1 2 VMware商业连续性解决方案 1 3 VMwar 测试和开发解决方案 8 二 VMware虚拟化实施方案设计 9 2 1
  • 微信小程序:搜索动画显示

    摘要 有时候 我们再加载时 搜索蓝牙和wifi时 需要一个搜索中的动画来渲染我们的页面 动画如下图所示 搜索动画函数wx showLoading wx showLoading函数的所有参数如下 而我们一般用到的是title 如图一中的tit
  • 010.汇编语言基于x86处理器教材习题4.2.8:①-⑤程序

    386 model flat stdcall stack 4096 ExitProcess proto dwExitCode dword data val1 byte 10h val2 word 8000h val3 dword 8000h
  • VUE渲染后端返回含有script标签的html字符串

    在接入支付宝支付模块的时候 支支返回的是一个form串 细看一下还有一个script标签 如何将其渲染出来给大家分享一下经验 注意点 不能在当前页面追加任何元素例如原生js innerHtml appendChiled等等 Vue原生v h
  • JavaCV FrameGrabber问题汇总

    JavaCV FrameGrabber问题汇总 Date 2018 09 27 FrameGrabber类 JavaCV中FrameGrabber类可以连接直播流地址 进行解码 获取Frame帧信息 常用方式如下 FrameGrabber
  • 匈牙利算法

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