趣味-配偶-匈牙利算法

别再为显卡发愁了!手把手教你用华为云ModelArts的免费GPU跑自己的深度学习模型 本文详细介绍了如何利用华为云ModelArts的免费GPU资源运行深度学习模型,从环境搭建到数据迁移、云端IDE使用及工业级训练技巧,帮助开发者零成本高效完成AI训练任务。特别适合初学者和预算有限的研究者。 阅读详情

 首先百度百科,了解一下匈牙利算法思想 :
         根据一个匹配是最大匹配当且仅当没有增广路,求最大匹配就是找增广轨,直到找不到增广轨,就找到了最大匹配。遍历每个点,查找增广路,若找到增广路,则修改匹配集和匹配数,否则,终止算法,返回最大匹配数。

匈牙利算法分析:

时间复杂度--邻接矩阵:最坏为 O(n^3) ;邻接表: O(n*m)

 

空间复杂度--邻接矩阵:O(n^2)             ;邻接表: O(n+m)

接着,我们换种方式理解它.....

用例

连线表示双方互有有好感,现在要尽可能的促成双方配对,使配对数尽量大。

数据:这里为了方便测试算法,默认设置为上图所示的数据,n=m=4。

输出:

思路:

(1)首先给男一号找第一个妹子,

(2)接着给男二号找第二个妹子

(3)接下来是男三号,很遗憾1号女生已经有主了。

我们试着给之前的男一号重新找个妹子。(黄色标记暂时被拆掉了)

(4)现在和前一个一样,已经进入递归了。

继续找,2号女生也有主了,那么我们给男二号也重新找个妹子。(黄色标记暂时被拆掉了)

(5)男二号重新找到三号女生了

(6)男一号重新找到二号女生了

(7)最终:给男三号腾出位置来了,与1号女生成功配对。

完整代码:

#include<iostream>
#include<string.h>
using namespace std;

int m=0,n=0,all=0;
int line[100][100];//标记i与j之间互有好感
bool used[100];    //假定已经被'抢占'成功 
int girl[100];     //标记女孩与谁配对成功了的 
bool find(int x){
	for(int j=1;j<=m;j++){   //扫描妹子 
		if(line[x][j]==1 && used[j]==false){  //互有好感 且 未被抢占  
			used[j]=1;
			if(girl[j]==0 || find(girl[j])){  //如果女孩未配对 或者 递归[为之前的帅哥重新寻找下家] 
				girl[j]=x;
				return true;
			}
		} 
	}
	return false;
}
void init(){
	n=4,m=4; 
	memset(line,0,sizeof(line));
	memset(used,0,sizeof(used));
	memset(girl,0,sizeof(girl));
	line[1][1]=1;line[1][2]=1;
	line[2][2]=1;line[2][3]=1;
	line[3][1]=1;line[3][2]=1;
	line[4][3]=1;
}
int main(){
	init(); 
	for(int i=1;i<=n;i++){
		memset(used,0,sizeof(used));  //注意每次都要清空used[] 
		if(find(i)==1) all++;
	}
	for(int i=1;i<=m;i++){
		if(girl[i]!=0){
			cout<<"妹子"<<i<<"成功与帅哥"<<girl[i]<<"号配对。"<<endl; 
		}else {
			cout<<"妹子"<<i<<"未与任何帅哥配对!"<<endl; 
		}
	}
	cout<<"配对成功数量"<<all<<endl;
} 

-感谢李中山同学友情出演...

 

Stable Matching Problem稳定匹配问题-----稳定婚姻算法 (一)问题的引出:             有N男N女,每个人都按照他对异性的喜欢程度排名。现在需要写出一个算法安排这N个男的、N个女的结婚,要求两个人的婚姻应该是稳定的。             何为稳定?             有两对夫妻M1 F2,M2 F1。M1心目中更喜欢F1,但是他和F2结婚了,M2心目中更喜欢F2,但是命运却让他和F1结婚了,显然这样的婚姻是不稳定的,随时都可 阅读详情

相关推荐

匈牙利算法详解

参考: https://zhuanlan.zhihu.com/p/96229700 一、匈牙利算法概述 匈牙利算法(Hungarian algorithm),即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现)。 匈牙利算法(Hungarian algorithm),主要用于解决一些与二分图匹配有关的问题。 概念点1——匹配。图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。 这里,我们用一个图来表示下匹配的概念: 如图所示,其中的三条边即该图的一个匹配。所以,匹配的.

lemonxiaoxiao的博客 11万+

二分图详解----匈牙利算法+km算法+ Gale-Shapley---婚姻匹配算法算法+例题

先介绍一下基本概念 以下基本概念转自其他的博客,不是原创 二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集   和  ,使得每一条边都分别连接 、   中的顶点。如果存在这样的划分,则此图为一个二分图。二分图的一个等价定义是:不含有「含奇数条边的环」的图。图 1 是一个二分图。为了清晰,我们以后都把它画成图...

qq_40938077的博客 1万+

匈牙利算法在数学建模中的应用与MATLAB实现

算法,作为计算机科学中的核心元素之一,影响着数据处理的效率和精确度。在众多算法中,匈牙利算法占据着独特的地位,尤其在处理优化问题时发挥着重要作用。该算法最初由两位数学家H.W. Kuhn和J. Munkres提出,并以匈牙利命名是因为Kuhn的研究受到了匈牙利数学家D. Konig关于矩阵理论的一些研究成果的启发。如今,匈牙利算法不仅广泛应用于计算机科学领域,还渗透到运筹学、经济学乃至社会学等多个学科领域,为解决各类分配问题提供了坚实的技术支撑。

weixin_36151775的博客 981

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

【书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程,这只是刚开始的样稿,其实我们也才刚开始】 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 -------等等,看得头大?那么请看下

DarkScope从这里开始 17万+

半导体设备隔振必看:如何用天棚阻尼PID控制实现VC-C级振动抑制(含SIMULINK模型)

本文深入探讨了在半导体精密制造中,如何运用天棚阻尼PID控制算法实现VC-C级振动抑制。通过构建高保真单自由度仿真模型,详细解析了从算法原理、SIMULINK实现到参数整定的全链路方案,并针对谐波扰动提供了陷波滤波器设计方法,为工程师提供了从仿真到实践的完整主动隔振技术指南。

pz89012345的博客 538

SAP_PP模块跑完 MRP,MD04 里却看不到“计划订单”?排查这 3 个最容易被忽略的主数据参数

MRP 是 SAP 逻辑最严密的模块之一,它绝不会随机罢工。当 MD04 里看不到计划订单时,请不要怀疑系统的计算能力。99% 的情况,都是因为我们给系统下达了矛盾的指令:一边告诉它“我有需求”,一边却通过主数据告诉它“不要计划”、“不要触发”或者“我是冻结的”。掌握这 3 个排查点,你就能在 5 分钟内解决大部分“MRP 失灵”的悬案,成为用户眼中的“系统神医”。

我小时候很黑的博客 597

匈牙利算法-看这篇绝对就够了!

本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现),文章整体结构如下: 基础概念介绍 算法的实现 好的,开始! 一. 部分基础概念的介绍 我会严格介绍其定义,并同时用自己的大白话来重述。 概念点1. 图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。 这里,我们用一个图来表示下匹配的概念: 如图所示,其中的三条边即该图的一个匹配;...

夜阑听风 18万+

第4章-07-将WebDriver获取的Cookie传递给Requests

在使用Selenium WebDriver获取了浏览器的Cookies之后,你可以将这些Cookies传递给requests库,以便在后续的HTTP请求中使用这些Cookies。这样做可以让你模拟浏览器会话,使得请求看起来像是从之前使用Selenium WebDriver控制的浏览器发出的。

黑夜开发者的博客 692

匈牙利算法——最大匹配问题详解

站在巨人的肩膀上学习一下,这两篇博主写的非常通俗易懂。 学习1 转自:https://blog.youkuaiyun.com/u013384984/article/details/90718287?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-Blog

qq757056521的博客 3215

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

包括YOLOv5、YOLOv7、YOLOv8等模型改进 738

【ComfyUI】SDXL + 单LoRA 房屋平面图渲染装修

本文介绍了一种基于ComfyUI的室内平面设计图自动生成效果图的工作流。该流程通过导入房屋平面图,结合SDXL室内设计模型与北欧风格LoRA模块,快速生成多房间效果展示。工作流包含图像输入、文本处理、模型加载和图像生成等环节,支持风格化渲染和细节补充,适用于建筑设计、家装展示、房地产营销等场景。核心采用SDXL通用室内设计模型和北欧极简LoRA,通过节点衔接实现自动化批量生成,能在短时间内将平面方案转化为逼真的三维效果图。该技术可提升设计呈现效率,辅助客户决策,并应用于教学研究领域。

Mr数据杨 3659

Gale-Shapley算法,匈牙利算法和KM算法三种匹配算法的总结

最近接触的匹配算法有三种:Gale-Shapley算法,匈牙利算法和KM算法 。 Gale-Shapley算法: 是用来求得一个稳定匹配使用的,它又称为 “ 求婚-拒绝算法 ”,可以说这个算法的名字起得也是非常知名达意了。 就拿男人向女人求婚打比方,为了使最后匹配得到的匹配集趋于稳定,就是说当前男人和女人的关系是相对稳定的,不会说存在两对男女,其中一对的男人和另一对的女人之间的好感比他们当前...

allenwakler的博客 4798

TensorRT - 使用自定义层扩展 TensorRT

TensorRT 支持通过自定义插件扩展功能。开发者可以基于 IPluginV3 接口实现插件类,并通过 IPluginCreatorV3One 创建器类注册到 TensorRT 插件注册表。插件实现需要包含核心、构建和运行时三种能力,并通过静态或动态方式注册。最后可使用 addPluginV3() 将插件实例添加到 TensorRT 网络中。这种方法允许在标准层不满足需求时,使用自定义层扩展模型功能。

1148

数据结构与算法 - 二分图匹配:匈牙利算法的应用场景

摘要: 本文深入探讨了二分图匹配问题及其经典解法——匈牙利算法。文章首先介绍了二分图的定义与性质,阐述了匹配问题在任务分配、课程选择等实际场景中的应用。随后详细解析匈牙利算法的核心思想,重点讲解了增广路径的概念及算法步骤,并通过Python代码实现演示了基于DFS的求解过程。最后,文章分析了算法的时间复杂度(O(VE))并提供了优化建议。该算法能高效解决最大匹配问题,在资源分配等场景中具有重要价值,是图论中的基础算法之一。(149字)

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

内存越界一定会导致程序崩溃吗?详解内存越界

本文详细解释了内存越界不一定导致内存越界的问题,全面介绍了C++内存越界的相关内容。

dvlinker的技术专栏 2万+

threejs中使用Reflector实现出倒影效果,并实现背景透明的效果(Reflector镜面背景透明, 倒影弱化)

在项目中遇到要实现倒影效果,threejs给我们提供了Reflector,可以轻松完成镜面效果,实现倒影。但背景不透明;并且反射出的倒影太亮了;网上没搜到解决方案, 自己修改了下源码实现了想要的效果,做个记录...

weixin_40856652的博客 5721

匈牙利算法(二分图匹配)

好,来讲简单的东西了匈牙利算法也就是二分图匹配Q二分图匹配是什么?还是先看题比较好 公牛和母牛 【问题描述】 有n只公牛和m只母牛,然后每只公牛都能和几只的母牛配对。在每只公牛只能配对一只母牛的情况下,求能为牛们配对最多多少对? 【输入】 第一行两个整数,n (0 ≤ n ≤ 400) 和 m (0 ≤ m ≤ 500) 。 第二行到第N+1行一共N行,每行对应一只公牛。第一个数

kkkGIGi_qtt 1820

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

匈牙利算法--求最大匹配(转)

转自https://blog.youkuaiyun.com/u013384984/article/details/90718287 本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现),文章整体结构如下: 基础概念介绍 算法的实现 好的,开始! 一. 部分基础概念的介绍 我会严格介绍其定义,并同时用自己的大白话来重述。 概念点1. 图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。 这里,我们用一个图来表示下匹配的概念: 如图所示,其中的三条边即该图的一个匹配;所以,匹

MC的博客 2212

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

匈牙利算法

匈牙利算法: 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘。 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭。 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧。 假设男孩们分别编号为1~n,女孩们也分别编号为1~n。 输入 第一行是一个整数T,表示测试数据

yan 282

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

匈牙利算法—介绍与基本用途

匈牙利算法应用于二分图(即可以分为两大部分,且个部分内不连接的图)匹配的问题,它的时间复杂度为O(nm)。它的基本原理是增广路。它的用途主要有三:1、单纯二分图匹配;2、最小点覆盖;3、最大独立集。下面,我将一一介绍。一、单纯二分图匹配例题1:有n只公牛和m只母牛,然后每只公牛都可以和几只的母牛配对。在每只公牛只能配对一只母牛的情况下,求能为牛们配对最多多少对?思路:公牛是二分图的一个集合,母牛也...

A_Bright_CH的博客 6300

两两匹配的最大匹配数——匈牙利算法

若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。

wvxvsuizhong的博客 1393

二分图最大匹配问题(匈牙利算法)

什么是二分图 如果一个无向图的的顶点可以分为两个互不相交的子集A和B,那么它就是二分图。也就是说,A、B内部不存在连边,所有连边都一头连着A中的顶点,另一头连着B中的顶点。 什么是二分图最大匹配? 二分图最大匹配问题,就是在A、B这两个集合中,不断选择两个存在连线的点,把他们连起来,求最多可以有多少条连线的问题。 怎么解? 匈牙利算法的核心在于:从A集合中选择一个点,然后将与其相连的B中的点依次对照,如果B中的点尚未匹配,那就将这两个点进行匹配,然后遍历A中的下一个点。接着继续访问与其相连的B

龙进的博客 1440

匈牙利算法 & [CodeVS 1222] 信与信封问题

匈牙利算法解决二分图最大匹配问题。有些地方说KM算法和匈牙利算法互为别称,但好像普遍称其中解决二分图最大匹配的那个算法为匈牙利,解决二分图最佳完美匹配的那个叫KM。 匈牙利算法的核心是寻找交互路径(增广路),即一条从未盖点出发,依次经过非匹配边、匹配边、非匹配边、匹配边……终止于未盖点的路径。说白了,寻找交互路径即寻找一对能互达的未盖点,限制是只能交替走非匹配边、匹配边。可以参考Matrix67的解读。

chrt's blog 1003

匈牙利算法的粗略解释

匈牙利算法的应用场景:二分图 可以理解分为两个集合,集合内部的元素不进行彼此配对,但是两集合之间进行配对 A集合与B集合进行配对,二分图如下 以上即为二分图 ,其中A集合与B集合进行配对,这个图可以刨析为三个部分,A集合为一部分,B集合为一个部分,连接A集合和B集合的线是另一部分,总共这三个部分,如果用代码实现就可以记录这三个部分 连接AB集合的线可以视为对于AB集合的关系 此时带入一个情景 假设你是月老,此时需要对一群男女进行牵红线,但是需要考虑男女之间的意愿,输入的K代表女生所心仪的男生

weixin_63291917的博客 369

二分匹配-匈牙利算法 配题(HDU 2444)

二分图匹配:可以通过网络流来求取最大匹配数,也可以通过匈牙利算法求解。 匈牙利算法:其思想就是,先给一个点分配一个配有,然后当无法给后面的新点分配配偶的时候,会问问其想配对的配偶的已经配好的配偶能不能去找其他配偶。 最大匹配的一些性质: 二分图的最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联。最大匹配数 = 最小点覆盖数(Konig定理) 二分图的最大独立集:在图中选取最多的点,...

猫ER 496
上一篇: 算法训练 之 2019-CCPC网络赛-1007 Windows Of CCPC
下一篇: Pydev + eclipse 配置
ଳxin
博客等级 码龄8年 83粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值