【学习笔记】二分图及相关应用
声明:本博客所有随笔都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。
1.匹配
对于二分图有一个非常重要的判定:两个点集是独立的,即点集内部没有边相连
还有一些定义:
极大匹配:指在当前已完成的匹配下,无法再通过增加未完成匹配的边的方式来增加匹配的边数
最大匹配:所有极大匹配当中边数最大的一个匹配
完全匹配:(完备匹配):一个匹配中,图中的每个顶点都和图中某条边相关联
(以上定义均来自百度百科;\(by \ the \ way \ ,\) 我以前总认为百度百科的定义太生涩难懂了,就按照自己的理解去记忆,但是越往后面学,内容细节越来越繁多,自己的记忆就会出现知识点混乱等情况,而百度百科的定义是最严谨的,所以我觉得还是非常有必要了解百度百科的定义)
而我们所说的“二分图匹配”一般指“最大匹配”
最大匹配的一个基本算法——匈牙利算法,推荐一篇较好理解的博客,这里就不过多介绍了
2.最小点覆盖 \(=\) 最大匹配
一些定义
点覆盖:对于图 \(G=(V,E)\) 中的一个点覆盖是一个集合 \(S⊆V\) 使得每一条边至少有一个端点在 \(S\) 中。
最小点覆盖:就是中点的个数最少的S集合。普通图的最小点覆盖数只能用搜索解。
简单证明
\(1.\)合法的 若除去最大匹配选择的那些边,还有一条边的端点未被任意一条在匹配中的边覆盖,那这条边就会被加进最大匹配;所以最大匹配时不存在有一条边的两个端点都未被选中,及所有边都至少有一个端点在 \(S\) 中
\(2.\)最少的 因为此时任意删去一条边,都会导致某一条边出现两个端点都不被覆盖的情况,所以是最少的
3.最大独立集 \(=\) 点数\(n\) \(-\) 最小点覆盖 \(=\) 点数\(n\) \(-\) 最大匹配
定义
在N个点的图G中选出m个点,使这m个点两两之间没有边的点中,m的最大值。
(这里要看清楚是两两之间没有边相连,而不是两两之间不连通)
简单证明
\(1.\)合法的 去掉了最小点覆盖中所有选择的点之后,剩下来所有的点,它们所连接的边全部被删除,即剩下的点间全部没有边相连
\(2.\)最少的 在点覆盖合法的情况下取了最少,再在前面添一个负号,即独立集取了最大
4.DAG的不可重点最小路径覆盖 \(=\) 点数\(n\) \(-\) 最大匹配
定义
找出最小的路径条数,使之成为 \(P\) 的一个路径覆盖,且每个点被且仅被一条路径覆盖
(看清楚是路径而不是边)
简单证明
假设最初状态为,每个点向自己这个点连的一条边,一共 \(n\) 条
然后开始扩展成路径,即每个点上的那条边尽可能的去和别的路径合并,每通过一条匹配边和另一条路径合并后,答案数就减一
所以答案等于 \(n \ -\) 最大匹配
5.DAG的可重点最小路径覆盖
定义
找出最小的路径条数,使之成为 \(P\) 的一个路径覆盖,且每个点至少被一条路径覆盖
结论&简单证明
我们把所有间接能到的点对,全部添一条直接到达的路径,相当于把中间所有的点打包,到时候遇到重复的就直接一次性越过(通过那条新连的边),然后再按照上面做不可重点即可
添一条路径很简单,直接 \(Floyd\)
F(i, 1, n)
F(j, 1, n)
F(k, 1, n)
if(mp[i][k] && mp[k][j])
mp[i][j] = 1;
6.无向图的最大团 \(=\) 补图的最大独立集
定义
完全图:完全图是一个简单的无向图,其中每对不同的顶点之间都恰连有一条边相连
最大团:在一个无向图中找出一个点数最多的完全图
简单证明
其实很简单,补图的最大独立集中所有的点两两之间都没有边,放到原图里来两两之间就都有边了,\(over\)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析