热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

二分图匹配相关性质(知识点整理)

思路来源http:www.matrix67.comblogarchives116https:blog.csdn.netACMer_ZParticledetails7857092

思路来源

http://www.matrix67.com/blog/archives/116

https://blog.csdn.net/ACMer_ZP/article/details/78570926

https://blog.csdn.net/huangshuai147/article/details/51087275

https://www.cnblogs.com/icode-girl/p/5418461.html

心得

有些东西真是学了又学学了又忘忘了又学

依稀记得自己去年就在学这个

最小点覆盖 最小边覆盖 最大匹配 最小路径覆盖 最大独立集

以下除最小路径覆盖指DAG外,其余皆为二分图

结论

1.最小点覆盖=最大匹配 

2.最大独立集=总点数-最大匹配

3.最小边覆盖=总点数-最大匹配

4.DAG不相交最小路径覆盖=DAG顶点数-对应二分图最大匹配

5.无向图最大匹配=最大匹配/2

输出最小点覆盖方案:https://blog.csdn.net/Code92007/article/details/83688492

输出最大独立集方案:https://blog.csdn.net/Code92007/article/details/98205680

证明

1.最小点覆盖

用最少的点,覆盖所有的边,全为孤立顶点(没边)输出0

证明:Konig定理

http://www.matrix67.com/blog/archives/116

 

2.最大独立集

选中最多的点,使得两两之间都没有边,

联合结论1,即证最大独立集=总点数-最小点覆盖

设最小点覆盖点集为S,S的大小为n,全集为U,

记没有在S中的点构成的集合为T(即U-S)

①若T内存在两点之间有边E,则E没有被S内的点覆盖,矛盾,故T内两两之间没有边

①说明,T是一个合法解,所以答案不小于T,ans>=|T|

②若T还可扩充,则必至少选一点v,v属于S,且v与T内所有点之间都没有边

这说明,与v相连的所有边,另一端的顶点都是集合S-v里的点,

同样表明,与v相连的所有边,被S-v的点覆盖了,因此,在最小点覆盖中,v多余,

这说明,S-v构成一个新的最小点覆盖,与S是最小点覆盖,矛盾

②说明&#xff0c;T不可扩充&#xff0c;所以答案不大于T&#xff0c;ans<&#61;|T|

①②表明&#xff0c;ans&#61;|T|

 

3.最小边覆盖

用最少的边&#xff0c;覆盖所有的点&#xff0c;有孤立顶点时不存在

证明&#xff1a;

由于最大匹配边能覆盖两个点&#xff0c;而非匹配边只能覆盖一个点&#xff0c;所以优先用最大匹配里的边

设点数为n&#xff0c;最大匹配为m&#xff0c;则m条边覆盖2*m个点&#xff0c;

其余n-2*m个点只能由n-2*m条非匹配边覆盖&#xff0c;

故共计n-m条边&#xff0c;为点数-最大匹配

 

4.DAG不相交最小路径覆盖

用若干条不相交(不共点不共边)的路径&#xff0c;覆盖所有的点

图片来源&#xff1a;https://www.cnblogs.com/icode-girl/p/5418461.html

左边DAG图&#xff0c;一个点拆成出点和入点两个点&#xff0c;二分图左侧为出点&#xff0c;右侧为入点

原图中1到3的连边&#xff0c;对应二分图中出点1到入点3的连边&#xff0c;

设DAG中顶点数为n&#xff0c;最大匹配数为m&#xff0c;且认为最大匹配的边有方向&#xff0c;从左指向右&#xff0c;

那么最大匹配上左边的点&#xff0c;因为有后继&#xff0c;所以不可能成为一条路径中的终点&#xff0c;

而其他的点&#xff0c;因为没有后继&#xff0c;所以只能成为出度为0的点&#xff0c;即终点&#xff0c;

终点的个数&#xff0c;即为路径的条数&#xff0c;所以&#xff0c;左侧剩下了n-m个点&#xff0c;也就对应了n-m条路径

 

5.无向图最大匹配&#61;最大匹配数/2

无向图因为左侧连向右侧有边&#xff0c;右侧连向左侧也有边

所以不论左侧右侧&#xff0c;统统求一遍最大匹配&#xff0c;

最大匹配边&#xff0c;左边被计一次右边被计一次&#xff0c;故除以2

 


推荐阅读
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 过去我习惯使用百度空间来记录个人的生活琐事,但随着需求的增长,我发现它的功能略显不足,特别是在代码分享和图片管理方面存在诸多不便。因此,我决定寻找一个更适合技术分享的平台,最终选择了博客园。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 在开发过程中,有时需要提供用户创建数据库的功能。本文介绍了如何利用 .NET 和 ADOX 在应用程序中实现创建 Access 数据库,并详细说明了创建数据库及表的具体步骤。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 本文详细介绍了如何在最新版本的Xcode中重命名iOS项目,包括项目名称、应用名称及相关的文件夹和配置文件。通过本文,开发者可以轻松完成项目的重命名工作。 ... [详细]
  • 本文详细介绍了如何在Oracle数据库中使用SQL进行分页查询,通过嵌套查询和ROWNUM函数的应用,实现数据的高效分页展示。 ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • Windows Phone 弹出窗口实现方案
    在当前版本的 Silverlight for Windows Phone 中,由于缺乏对 ChildWindow 的支持,开发者需要采用其他方法来实现弹出窗口的功能。本文将探讨几种有效的解决方案。 ... [详细]
  • empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!检测一个变量是否是null ... [详细]
author-avatar
肥姐PK老赖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有