算法讲解:二分图匹配

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

二分图匹配,自然要先从定义入手,那么二分图是什么呢?

二分图:

二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。

简单的说,一个图被分成了两部分,相同的部分没有边,那这个图就是二分图,二分图是特殊的图。

匹配:

给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。
极大匹配(Maximal Matching)是指在当前已完成的匹配下,无法再通过增加未完成匹配的边的方式来增加匹配的边数。最大匹配(maximum matching)是所有极大匹配当中边数最大的一个匹配。选择这样的边数最大的子集称为图的最大匹配问题。
如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。
求二分图匹配可以用最大流(Maximal Flow)或者匈牙利算法(Hungarian Algorithm)

注意匈牙利算法,除了二分图多重匹配外在二分图匹配中都可以使用。

注:二分图匹配中还有一个hk算法,复杂度为o(sqrt(n)*e)由于复杂度降低较低,代码量飙升而且绝大多数情况下没人会闲的卡个sqrt的复杂度。。在此先不讲了,有兴趣可以自己百度,貌似卡这个算法的只有hdu2389

嘛 首先我们讲解一下匈牙利算法的过程:

匈牙利算法:

匈牙利算法几乎是二分图匹配的核心算法,除了二分图多重匹配外均可使用

匈牙利算法实际上就是一种网络流的思想,其核心就是寻找增广路。具体操作就是嗯。。拉郎配

注:以下转自 http://blog.csdn.net/dark_scope/article/details/8880547

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

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

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


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

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

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


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

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


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

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

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

KM算法入门 KM算法入门 在学习KM算法前,我们先感受一下匈牙利算法(由匈牙利数学家Edmonds提出)。 匈牙利算法 解决何种问题的呢 匈牙利算法是解决二分图的最大匹配度问题。 何为二分图 如果用染色法来判断的话,那么整幅图最后只会有两种颜色的元素;所谓二分图,就是可以划分为两个集合,且同一集合中的元素是互不相连的,不同集合中的元素是可以相连的。 下面我们通过一个简单的例子来说明: 现在... 阅读详情

相关推荐

km算法入门

本文知识均由笔者自学,文章有错误之处请不吝指出。 笔者刷数模题的时候有一道题考到了“二分图最大权分配”,需要用到KM算法,但是书上对KM算法的介绍又臭又长,更何况有些同学“匈牙利算法”也没学过(由匈牙利数学家Edmonds提出),自然难以理解所谓的KM算法。本文旨在用通俗易懂的语言,向读者介绍匈牙利算法和KM算法。 一、匈牙利算法 匈牙利算法用于解决什么问题? 匈牙利算法用于解...

weixin_30745553的博客 1477

二分图匹配算法总结1

最大独立集问题: 在N个点的图 G 中选出 m 个点,使这 m 个点两两之间没有边.求 m 最大值.如果图G满足二分图条件,则可以用二分图匹配来做.最大独立集点

图解匈牙利算法:从增广路到最大匹配的完整流程

本文通过图解方式详细解析匈牙利算法二分图最大匹配中的应用,重点阐述增广路径的核心作用及DFS/BFS两种实现方式。从基础概念到实战优化,帮助读者掌握这一经典算法的完整流程与工程实践技巧,适用于求职匹配、资源分配等多种场景。

weixin_42524824的博客 917

我对KM算法的理解

一般对KM算法的描述,基本上可以概括成以下几个步骤: (1) 初始化可行标杆 (2) 用匈牙利算法寻找完备匹配 (3) 若未找到完备匹配则修改可行标杆 (4) 重复(2)(3)直到找到相等子图的完备匹配 关于该算法的流程及实施,网上有很多介绍,基本上都是围绕可行标杆如何修改而进行的讨论,至于原理并没有给出深入的探讨。 KM算法是用于寻找带权二分图最佳匹配算法二分图是...

茅屋 2795

二分图匹配-匈牙利算法

二分图概述 所谓二分图,就是我们可以将图中所有的点分为A、B两个集合,从而使得集合内部任意两个点都不直接相连。 二分图适用于解决一种类似于婚姻匹配的问题,即如果A-B匹配,那么A就不能在和C匹配,即便他们之间有好感。 最大匹配 二分图的最大匹配即需要给出一种分配策略,使得产生尽可能多的对(就是撮合最多多少对情侣)。 匈牙利算法是一个用于解决该类问题的标准算法之一,核心想法是让路:假设你(就是红娘)当前想撮合Bi与Gk,但是Gk已经有了对象Bj,此时红娘就和Bj交涉能否让Bj尝试换一个对象.

The Shawshank Redemption 6523

算法讲解二分图匹配【图论】

二分图匹配,自然要先从定义入手,那么二分图是什么呢? 二分图二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 简单的说,一个图被分成了两部分,相同的部分没有边,那这个图就是二分图二分图...

既然弱小,就只顾变强就是了 4万+

洛谷 P3386 【模板】二分图匹配

题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 输出格式: 共一行,二分图最大匹配 输入输出样例 输入样例#1: 1 1 1 1 1 输出样例#1: ...

whisperlzw的博客 262

【日常学习】【二分图匹配】【匈牙利算法】codevs4265 大智的妹子们题解

题目描述 Description 有一天,在动漫社的大智给妹子们买了Love Live!的cosplay服,刚好⑨件。 恰好有⑨个闻讯而来的妹子们,她们都拿到了自己想要的衣服。然后她们拍了各种照片,发到了朋友圈里,于是越来越多的妹子知道了这件事,都来请求大智买cosplay服。 于是大智又买了m种cosplay服(每种只有一件),吸引来了n个妹子,但是这些妹子喜欢的衣服不同,有人喜欢南小

西家家 731

二分图【判定、最大匹配、最小点覆盖、最小路径覆盖及例题】

一、最大匹配 定义:给定一个二分图G,在G的一个子图M中,M的边集E中的任意两条边都不交汇于同一个结点,则称M是一个匹配。选择边数最大的子图称为最大匹配问题\color{red}{ 定义:给定一个二分图G,在G的一个子图M中, M的边集{E}中的任意两条边都不交汇于同一个结点,则称M是一个匹配。选择边数最大的子图称为最大匹配问题 }定义:给定一个二分图G,在G的一个子图M中,M的边集E中的任意两条...

qq_43803508的博客 1146

二分图的最大匹配——匈牙利算法

一、前人种树 博客:趣写算法系列——匈牙利算法 博客:二分图最大匹配 博客:二分图的最大匹配——匈牙利算法 二、题目讲解 博客:POJ1274:The Perfect Stall(二分图最大匹配 匈牙利算法) 转载于:https://www.cnblogs.com/xzxl/p/7235778.html...

weixin_33860737的博客 78

第三章 搜索与图论(三)——最小生成树与二分图

也可以理解为迭代n次,每次选择一条与集合距离最短的边加入集合,不过第一次迭代无法选择边,只能随便选一个点作为集合中的元素,后续的迭代就是选择边(已经被匹配的情况下,可以让对方的匹配对象重新匹配。考虑完成的点一定无法匹配,虽然考虑完成分为匹配成功与匹配失败两种情况,但是匹配成功后,st数组失去了意义(由于需要判断的图可能是非连通图,所以需要遍历每一个点,若当前点没有染色,则将其作为dfs的起点进行染色。然后试着匹配下一条邻边的对象,若对方的匹配对象需要重新匹配,那么他就不应该试着匹配已经考虑完成的点。

凡事都是靠练习 1357

二分图最大匹配——匈牙利算法详解

贵圈真乱(

EQUINOX1的博客 3417

【转】二分图匹配

这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个...

weixin_30920091的博客 83

二分图核心算法精讲:从染色法判定到匈牙利算法与建模实战

图论是计算机科学中描述事物间关系的基础模型,而二分图作为一种特殊的图结构,因其清晰的二分约束特性,在算法设计与问题建模中具有重要价值。其核心原理在于将顶点集划分为两个互不相交的子集,使得所有边都连接不同子集的顶点,这种结构为高效算法提供了可能。从技术价值看,二分图不仅是理解图匹配、覆盖等经典问题的关键,更是将复杂现实问题(如任务调度、资源分配)抽象为可计算模型的强大工具。通过染色法(DFS/BFS)可高效判定二分图,而匈牙利算法则利用增广路径思想求解最大匹配问题,二者共同构成了处理二分图的基础。在实际应用场

weixin_33860553的博客 355

二分图最大匹配

若一张无向图G,可以将所有的点分成2个点集,且2个点集内部没有连边,那么称G可以划分为一张二分图。从中我们可以发现二分图的划分不一定唯一且不一定连通。有向图在实际问题中,也可以划分二分图二分图存在的充要条件:没有奇环(即一个环里的点数为奇数)思路与返回贪心类似vis[i]表示左部的点i是否访问match[i]表示右部的点i与谁匹配i <= m;return 1;return 0;

tankewei114514的博客 556

图论算法(五):网络流与二分图匹配

网络流是图论中一个极具实用价值的分支,它研究的是在带权有向图中,从源点流向汇点的最大流量问题。网络流模型广泛应用于物流运输、电路设计、任务调度、图像分割等领域。与之密切相关的二分图匹配则解决“如何为两类对象建立最佳配对”的问题。阅读指南:本文包含👇最大流:Ford-Fulkerson、Edmonds-Karp、Dinic 算法最小割:最大流最小割定理二分图匹配:匈牙利算法、KM 算法流程图:流程图片代码实现:带详细注释LeetCode实战:典型例题+解题代码。

2302_81155164的博客 865

二分匹配

简要解析二分匹配

Queenie_Charlie 的博客 530
上一篇: hdu1281 棋盘游戏 二分图匹配
下一篇: poj2594 经处理后的最小路径覆盖
thunderMrbird
博客等级 码龄10年 41粉丝 37原创
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值