「反演」学习笔记
「反演」学习笔记
小声bb:本来看skyh推的博客,是来学容斥的,莫名其妙被强塞了反演
概念
好多童鞋还不知道啥是反演,反正听起来挺牛逼的,谁会谁被膜。
比如说有两个未知量 \(x,y\),我们用 \(x\) 表达出来了 \(y\),比如一个一次函数:
那么我们用 \(y\) 表示 \(x\) 就是:
\(emmmm\),这差不多就是个反演。
然后我们就搞高级一点:
假设有两个函数 \(f\) 和 \(g\) 满足:
已知 \(f\) 求 \(g\) 的过程就叫做「反演」。
二项式反演
例题
有 \(n\) 个小盆友,每个人有一个编号 \(1,2...,n\) 。
将这 \(n\) 个小盆友排成一列,编号为 \(i\) 的小盆友不能在第 \(i\) 个位置。
求出所能排队的方案数,\(n\leq 10^5\) 。
简单容斥(听说小学生都会??)
- 假设 \(n=3\) 。
我们拿出高一老师(??)常拿的韦恩图像:
定义:
\(A\) 集合:编号为 \(1\) 的小盆友站到 \(1\) 的方案数。
\(B\) 集合:编号为 \(2\) 的小盆友站到 \(2\) 的方案数。
\(C\) 集合:编号为 \(3\) 的小盆友站到 \(3\) 的方案数。
我们要求的就是 \(n! - |A\cup B\cup C|\),用简单的容斥可得:
\(ans=n! - (|A|+|B|+|C|-|A\cap B|-|B\cap C|-|A\cap C|+ |A\cap B\cap C|)\)
得出公式
我们可以大胆猜想:
- 什么意思?
\(\binom{n}{k}\times (n - k)!\) 表示强硬的将 \(k\) 个人放到自己应该放的位置(\(i\) 放到第 \(i\) 个位置),剩下 \(n-k\) 个人随便放的方案数。
- 为啥要加一个 \((-1)^k\)?
比如说你加上了一个 \(k=2\) 的方案数,强硬地将 \(2\) 个人,后面我们统计 \(k=3\) 时,我们会发现:在前面 \(k=2\) 时,可能有某个小盆友被放到了自己应该放的位置,所以要
减去这些被多余统计的方案,加法同理。
新定义
定义 \(f[n]\) 表示 \(n\) 个人随便站的方案数。
定义 \(g[n]\) 表示 \(n\) 个人都不站在自己应该在的位置的方案数。
这样我们直接枚举有多少个人站错位置,便可求出 \(f[n]\)。
但是我们会发现,我们可以直接用 \(f[n] = n!\) 求出 \(f[n]\),而且我们还不会求出 \(g[n]\),难受~~~
小钥匙
我们会发现之前解决那个例题的公式中有一个这个东东:
易得:这个东东只有 \(n=0\) 时才为 \(1\),否则即为 \(0\) 。
- 我们再引进一个神犇数学符号:\([P]\),表示条件 \(P\) 符合时,为 \(1\);否则即为 \(0\),(好像一个 \(bool\))。
所以上面那个东东就可以化为:
反演
之前我们新定义里:
用 \(g[n]\) 表示出了 \(f[n]\),然而我们并不知道 \(g[n]\),反而知道 \(f[n]\),我们就需要一些骚操作(繁衍呸,反演),来求出 \(g[n]\) 。
说一句废话:
改一下这个废话:
哦!!!中间那个条件,我们是不是可以用一下那个小钥匙?
看一看中间那两个恶心的组合数:
可以考虑为从 \(n\) 个物品里,先选 \(m\) 个,再从 \(n-m\) 个里选 \(k\) 个的方案数。
可以变为为从 \(n\) 个物品里,先选 \(k\) 个,再从 \(n-k\) 个里选 \(m\) 个的方案数,组合数可以变为: \(\binom{n-k}{m}\times \binom{n}{k}\) 。
原式变为:
交换一下:
然后将 \(m\) 和 \(k\) 交换一下:
再次交换:
诶!!后面那个东东就是 \(f[n - k]\),可,我们成功了!!!
\(emmmm\),好丑,写好看一点:
得出结果
这个好像就是二项式反演
可能与 \(A\) 层的巨佬们学的有点不同,有错误,请见谅我这个蒟蒻。
莫比乌斯反演
例题
小盆友学英语,他拿到 \(26\) 个小写字母,他拼出若干个长度为 \(n\) 的字符串,求出有多少个字符串的循环节恰好为 \(n\),\(n\leq 10^9\) 。
连小盆友都知道循环节是啥,不用我说吧....(最短的一个子串复制若干遍后拼起来跟原串相等的字符串)。
新定义
定义 \(f[n]\) 表示长度为 \(n\) 的字符串的个数,显然是 \(26^n\) 。
定义 \(g[n]\) 表示长度为 \(n\) 且循环节长度为 \(n\) 的字符串的个数。
可以得出:
小钥匙
上次我们用了一个条件表达式,打开了反演的关键,这个我们同样搞一个:
定义一个 \(\mu[n]\) 满足:(莫某某某搞的)
其实这个就是莫比乌斯函数,至于性质,可以看一眼龙蝶的。
反演
同样,我们说一句废话:
将条件表达式变一下:
好,用我们的小钥匙:
上次我们将 \(m\) 和 \(k\) 进行了交换,这次怎么处理呢?
我们会发现 \(n\) 能将 \(m\) 整除,\(\frac{n}{m}\) 能将 \(d\) 整除,所以我们可以得出 \(n\) 既能将 \(m\) 整除,又能将 \(d\) 整除,这样我们就可以将 \(m\) 和 \(d\) 交换了。
交换一下:
不错,后面那个东东又可以化为我们的 \(f\),可
得出结果
这个好像就是莫比乌斯反演