二分图_匈牙利算法

二分图

  • 其顶点可分为两集合X和Y,所有的边关联的两顶点中,恰一个属于X,另一个属于Y。同一集合的结点不相连。
  • 如果一图是二分图,那么它一定没有奇环。
  • 如果一图没有奇环的话,那么他可以是二分图

二分图的判顶

  • 染色法:假设DFS初始点A涂黑色,与它相邻的点涂白色。如果搜到某一个点u的相邻点v已经涂色并且与u同色,就不可能是二分图

概念

  • 匹配:给定一个二分图G,在G的一个子图M中,M的边集合{E}中的任意两条边都不依附同一个顶点,则称M是一个匹配
  • 最大匹配:包含的边数最多的匹配
    • 任意取一个匹配M(可以是空集或只有一条边)
    • 令S是非饱和点(尚未匹配的点)的集合
    • 如果S = 空集 ,则M已经是最大匹配
    • 从S中取出一个非饱和点u0作为起点,从此起点走交错(交替属于M和非M的边构成的极大无重复点通路或回路)P
    • 如果P是一个增广路(P的终点也是非饱和点)令M = (M-P)U(P-M)
    • 如果p都不是增广路,则从S中去掉u0 转到第三步
  • 完美匹配:所有的点都在匹配边上的匹配
  • 最佳匹配:如果G为加权二分图,则权值和最大的完美匹配称为最佳匹配
  • 图三、图四中红色的边就是图二的匹配,图四是最大匹配也是完美匹配*
    图片说明

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

  • 交替路:从一个未匹配点出发,依次经过非匹配、匹配边、非匹配边...形成的路径
  • 增广路:从一个未匹配点吃法,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路
  • 图五中的一条增广路如图(匹配点均用红色标出)*
    图片说明
    增广路取反【黑变红,红变黑】就可以多找一个匹配【黑色多于红色】

由增广路定义可以推出下述三个结论

若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。

  • 1——P的路径长度必定为奇数,第一条边和最后一条边都不属于M【首尾是未匹配点】
  • 2——p经过取反操作后可以得到一个更大的匹配M'
  • 3——M为G的最大匹配当且仅当不存在相对于M的增广路径

算法的轮廓

  • 置M为空
  • 找出一条增广路径P,通过取反操作获得更大的匹配M' 代替M
  • 重复第二步,直到找不出增广路径为止
  • 复杂度O(V*E)
全部评论
https://www.bilibili.com/video/av51018897?from=search&seid=9600477484829687288
点赞 回复 分享
发布于 2019-09-28 20:20
https://www.bilibili.com/video/av16362938?from=search&seid=13429175200151944407
点赞 回复 分享
发布于 2019-09-28 20:19
https://www.bilibili.com/video/av60813417?from=search&seid=13429175200151944407
点赞 回复 分享
发布于 2019-09-28 20:19
https://blog.csdn.net/dark_scope/article/details/8880547
点赞 回复 分享
发布于 2019-09-28 20:00

相关推荐

行云流水1971:优化后简历(以 “后端开发岗” 为目标) 基本信息 姓名:XXX | 电话:XXX | 邮箱:XXX 求职意向:后端开发工程师 | 意向城市:XXX 教育经历 2023.09-2027.07 XX 大学 | 计算机科学与技术 | 本科 核心课程:Java 程序设计、数据库原理、计算机网络、数据结构(成绩均 85+) 技能关联:掌握 Java 基础语法、MySQL 增删改查,为后端开发奠定技术基础 项目经历 项目 1:小说推荐 - 大数据智能推荐平台 | 后端开发 | 2025.09-2025.12 技术栈:Java、SpringBoot、MySQL、Redis、Kafka 核心动作: 参与用户行为数据采集模块开发,用 Kafka 实现日志数据异步传输,峰值吞吐量提升 40%; 基于 MySQL 设计用户 - 小说关联表,配合 Redis 缓存热门推荐列表,页面响应时长从 300ms 缩短至 120ms; 成果:支撑日均 1000 + 用户访问,推荐内容点击率较初始版本提升 25%。 项目 2:在线博客 - 个性化博客分享平台 | 后端开发 | 2025.03-2025.06 技术栈:Java、SpringBoot、MyBatis、MySQL 核心动作: 开发博客发布 / 编辑接口,通过 MyBatis 实现数据持久化,接口成功率达 99.8%; 设计用户权限控制逻辑,区分普通用户 / 管理员操作权限,避免非法内容发布; 成果:完成 5 个核心功能模块开发,实现博客内容的全流程管理。 技能证书 技术栈:熟练使用 Java、SpringBoot、MyBatis 进行后端开发;掌握 MySQL 数据库设计与优化、Redis 缓存应用 工具:Git 版本管理、Postman 接口测试 自我评价 具备 Java 后端开发基础,参与 2 个完整项目的后端模块开发,能独立完成接口编写、数据持久化等工作;熟悉 SpringBoot 等主流框架,可快速上手企业级开发流程,具备良好的代码规范与逻辑思维。 需要我帮你补充项目的量化成果细节(比如接口性能、用户数据等)吗?若需要更精准的岗位适配优化,可私信沟通。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务