组合数学(容斥与反演)
前言
校测被数学干碎了,赶紧来补一点容斥和反演的东西,能补多少算多少吧。
特别说明:这一篇学习笔记是组合数学的第二篇。
容斥
让我们从梦开始的地方讲起。
容斥原理
设全集
这个东西就是小学奥数的容斥原理。证明考虑一个元素的系数应该为
但是这种最原始的原理不常用,更多的是考察选手容斥的思想。
例题
在集合
数据范围:
首先这道题的限制很多,我们可以先把它们全部列出来:
- 无序
- 互不相同
- 非空子集
- 每个元素出现次数均为偶数
对于第一个限制我们只需要在最后去标号即可,现在考虑剩下三种如何处理。
在笔者看来,我们做题时可以先去处理相对难处理的限制,然后再减去容易处理的东西。对于这道题而言,限制四有些神秘,我们就先考虑这个东西。假设现在我们设
其实对于前
对于子集为空的情况,说明前
所以直接递推就好了,时间复杂度
有
数据范围:
这道题可以分为三部分,首先选出
第一部分是
第二部分,考虑每一门学科分数比
第三部分,枚举每一科以及成绩,有:
把最后一个 使劲插一下即可,时间复杂度
min/max 容斥
一个一点也不平平无奇的式子:
其中
证明:
我们考虑集合中第
第二个同理。
或许你会觉得这个式子很奇葩,我既然能求最小值为什么不能求最大值呢?您别说有的时候还真是!这种东西在期望中最常见,并且因为期望有线性性所以可以直接用
于是就有:
证明:
我们直接把期望拆开做,就有:
然后我们使用之前证明的容斥:
拓展-kth Min/Max
证明:
与之前的类似,还是考虑集合中第
然后再套上期望就无敌了。
例题
按位或 (本题要用到一点卷积知识,建议提前学习后完成此题)
你需要将数字
数据范围:
考虑构造一个函数
我们设
然后问题的答案就是
然后问题就转化成求
现在我们暴力拆开上面的东西,就有:
其中后面表示第一次出现一的时间为
(其中
可以注意到这些
现在的问题就在于如何快速求解
有
数据范围:
我们可以类比上一道题,将期望套上最大值。然后注意到
对于一个
但是我们直接枚举肯定爆炸了。所以我们需要合并一些项,让枚举一个东西的复杂度能够被接受!
现在的式子是这样的:
其中
用
时间复杂度
在一棵有
数据范围:
还是套路地转化题意,先把答案表示成
如果你草率地硬套高消就 T 飞了,所以考虑树有什么特殊的性质/结构。
不难发现这个式子可以用待定系数法从叶子节点递推回根,然后考虑把转移式里的
我们考虑把
我们求出所有
考虑答案写成如下形式:
如果直接枚举子集还是 T 飞,但是对于不同的询问
反演
这是一个听着很高大上,实际不简单(因为wtcl)的东西。
反演的实质
对于形如下面的式子,我们称左右两式互为反演式:
然后
我们可以把反演看成以下形式:
其中反演系数
,将 代入 可得;- 将
代入 、 代入 上式仍成立,很显然故不证明。
所以每种反演其实都有两套公式,具体的内容请看后文。
子集反演
首先我们需要知道子集反演解决什么样的问题:在恰好是某个集合与至少/至多是此集合之间转换。
如果我们求一个特定的符合要求的集合
证明:
例题
给一张
数据范围:
首先你会看到
该如何破局呢?
考虑到算法的瓶颈在于枚举子集,在枚举时有要求:任意两点对应的点不能相同。我们先不考虑这个限制。怎么个不考虑呢?我们引入一个
这不就对应了标题的子集反演吗?于是就可以得到:
然后我们就可以先去求解
实际写的时候把最后一维扔掉,最后把
总结
感觉这类题比较容易识别,因为题目中
二项式反演
二项式反演是最常见的反演之一,下面给出两种形式并证明第一种。
形式一:
形式二:
形式一证明:
形式二类似。
常见形式
对于求恰好若干个元素满足条件的题目,若不能直接求,可以考虑先转化成钦定有若干个元素满足条件再套上二项式反演。或者说题目条件太苛刻或难以高效处理,这时若去掉部分限制则有优秀做法,即可考虑容斥/反演。但是在使用前需要寻找足够题目性质,不然可能不能进行优化或转换。
二项式反演只是我们处理***钻限制条件的手段,但真正的思考需要到位才行。一个题可以尝试的方法有很多,但是我们在做题时不能盲目 bfs,而是需要结合题目具体条件(特殊性质、已知、问题)筛选合适的做法。
例题
一个有
数据范围:
我们设
于是就有
然后就是去找
然后看到后面这坨直接二项式反演就可以得到:
然后直接算就行。
有两个序列
因为每一个
然后就能想到一个 然后就做完了!
但是这个东西似乎无法直接转移((,所以我们需要换一下思路,那么不妨放宽条件,我们重新定义一个
其中
然后我们可以找找 (这不就是二项式反演的组合意义吗),然后因为:
根据二项式反演有:
莫比乌斯反演
对于一些函数,我们无法快速求出其值,但可以快速求出其倍数或约数的值,我们就能通过莫比乌斯反演快速求值。
积性函数
定义:若一个数论函数
性质:若
常见积性函数
-
单位函数
-
常数函数
-
幂函数
,其中 简记为 -
因数个数函数
-
除数函数
,其中 时就是因数个数函数, 时为因数和函数,简记为 -
欧拉函数
-
莫比乌斯函数
狄利克雷卷积
性质
- 交换律:
- 结合律:
- 分配律:
- 如果
是积性函数,则 也是积性函数。
有了这些性质,我们将前面的某些积性函数卷一卷就可以发现一些有趣的事实。
比较重要的卷积
将
与上一个式子相似,不过多赘述。
证明:
设
应用-欧拉反演:
证明:当
应用-莫比乌斯反演:
莫比乌斯反演的另一种形式(经典形式):
以上就是最基本的卷积,需要无条件记住!接下来我们根据上面的一些东西可以口胡推出另一些式子。
例题
前言:写了这么多前置知识,终于可以开始最有趣的推式子环节了!
注:以下均默认
其中
令
后面那坨可以
数据范围:
话不多说开始推式子:
这里最后两个
令
后面的
围护
- 令集合
等于 。 - 令集合
等于集合 与 的并。 - 令集合
等于集合 与 的积, 。 - 询问
在集合 中出现次数模 的结果。
数据范围:
考虑到 bitset
记录答案,然后对于1、2操作我们直接维护即可。
因为有
如何维护
于是就做完了。
(莫反先咕了,因为感觉大多都有点板,等找到好题 我一定会回来~的!)
斯特林反演
还没有掌握斯特林数基础知识的读者可参见我的另一篇博客,下面直接给出反演形式。
一般形式
证明(用到反转公式)(两形式类似故只证明第一种):
常见题目形式
没啥好说的,形似二项式反演,神似二项式反演。只不过在做题中要考虑清楚题目组合意义,不要把两种反演混为一谈。
例题
TopCoder13444
给出一个
数据范围:
这种就是典型的把难处理的限制先转化成好处理的然后再反演的问题。
我们先只考虑
不妨换一种思考角度。若两列相同,我们就把它们划分到同一个集合中。所以我们就可以枚举把
反演一下得到:
代入
定义两个结点数相同的图
数据范围:
这道题和连通性相关,于是考虑维护连通块。若我们直接求解有
于是就可以斯特林反演得到:
考虑答案为:
所以我们只需要求出所有
因为
注意到一条边的组成是:
后记
完稿时间:2025.1.24 19:55
虽说很早就开始写了一点内容,但是这篇博客的主体都是这一天左右的时间写的,写完是如释重负啊!明天打完模拟赛听了评讲就差不多结束年前的课了,但是我感觉还是有很多东西没有写。我数学太弱了,亟待加强!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)