[Note] 《炫酷反演魔术》学习笔记
[Note] 《炫酷反演魔术》学习笔记
如果你像我一样记忆力很差,那么确保一次性理解深刻是唯一的方法。从不同角度看能得到不同的理解方式,显然,OI 这边的并不是一种好理解的方式,但是相信你看完本文也能从迷糊变成稍微不迷糊一点(
当然也可能是更迷糊)。建议您打开 VFK 的炫酷反演魔术的 PPT 对照着翻。
1. 识别二项式定理
\[(a+b)^n=\sum_{k=0}^n {n\choose k}a^{n-k}b^{k} \]
可采用组合意义来理解,\((a+b)^n\) 的组合意义就是每次从 \(a,b\) 中选择一个,选择 \(n\) 次,其中选择 \(n-k\) 个 \(a\) 和 \(k\) 个 \(b\) 的方案显然就是 \(n\choose k\)。
2. 错位排列问题
求有多少 \(1\dots n\) 的排列 \(a\),满足 \(\forall i\in[1,n],a_i\neq i\)。以下可能将 \(a_i=i\) 称为 \(i\) 站对了,反之亦然。
我们可采用容斥原理来解决这个问题,比较简单。
我们猜想,对于一般的问题,该式可以写为:
我们就称 \((-1)^k\) 是容斥系数,我们本来是要算恰好有 \(0\) 个站对的方案数的,但是我们只能算钦定 \(k\) 个站对的方案数,巧合的是,所有钦定 了 \(k\) 个位置站对的集合,其方案数都是相同的,就是 \((n-k)!\),所以我们将它们合到一起算,我们容斥的目的本来是把恰好 \(0\) 个站对的方案减出来,换句话说,我们就是要求这样操作之后,除了恰好 \(0\) 个站对的方案的贡献是 \(1\),其他方案贡献全是 \(0\)。这就是说:
其中蕴含了
这个式子,它的本质就是容斥,换言之,一个恰好有 \(n\) 个站错的方案在统计钦定 \(k\) 个站错的的时候被算了 \(n\choose k\) 次,即恰好有了 \(n\) 个位置站好的一个方案,如果站对了的位置集合是 \(s\),那么对于所有 \(t\subsetneq s\),计算钦定 \(t\) 的方案的时候就已经算过它一次了,对于 \(|t|=k\) 的 \(t\) 一共 \(n\choose k\) 次。
还记得容斥系数是多少吗,是 \((-1)^k\),对于规模为 \(n\) 的对象,他被之前的对象计算的次数是就是式 \(\text{(1.a)}\),我们现在要求的是没有站对了的,也就是要求 \(n\) 不等于 \(0\) 的方案全都没有贡献。
这个式子蕴含了我们的目标,我们只要 \(n=0\) 的方案有贡献。因此当我们需要计算另外的问题,它是这种钦定/恰好之类的问题的时候,只要恰好 \(n\) 个的方案和钦定 \(k\) 个的方案满足这种贡献方式,也即钦定 \(k\) 个的方案会贡献所有它的超集。如果我们说 \(f(n)\) 是钦定 \(n\) 个之后剩余元素的分布方案函数(上面 \(f(n)=n!\),钦定 \(k\) 个的方案个数是 \(f(n-k)\)),\(g(n)\) 是恰好 \(n\) 个元素站错的方案数:
总之上式 \((2)\) 给了我们转化钦定/恰好的一个工具。经过 VFK PPT 里面的推导,得到:
我们实际上利用的是
将蕴含在答案中的 \([n=0]\) 化成 \(\sum_{k = 0}^{n}{(-1)^k\binom{n}{k}}\) 再通过恰好推钦定的 \((3)\) 式,导出 \((\text{A})\) 式,我们称它为二项式反演。
3. 一般性的反演
已知 \(f\) 求 \(g\) 的过程就叫反演,\(\mathbf{a}\) 是变换矩阵,我们叫它变换核,它将问题变成一个容易计算的问题,然后我们把 \(\mathbf{a}^{-1}\) 叫做反演核,用它还原问题的解。当然,变换并不一定是线性变换,变换核和反演核也可以不是矩阵,我们暂且避开不提。
如果我们要对于线性变换 \(\bf a\) 直接反演,那么我们可能只能用高斯消元直接求解 \(\bf {a}^{-1}\),而有一类反演他们的变换核和反演核比较规则,例如刚刚的二项式反演。其中 \(\bf a\) 是 \(\binom{n}k\),\(\bf a^{-1}\) 就是 \((-1)^{n-k}\binom{n}k\),所以显然应该有 \(\bf a\cdot \bf a^{-1}\) 等于单位矩阵。这一过程就是刚刚推导二项式反演过程的逆过程,而其中的关键就是 \((2)\) 式。有的地方可能叫反演核与变换核的正交性。
在 VFK PPT 里面的推导过程,我们其实可以看做利用了 \((2)\) 导出的以下形式:
4. 莫比乌斯反演
求长度为 \(n\) 且仅包含小写字母,循环节长度为 \(n\) 的字符串个数。
若设 \(f(n)\) 表示长度为 \(n\) 的字符串个数,\(g(n)\) 表示长度为 \(n\) 且周期是 \(n\) 的字符串个数。那么我们可以通过枚举 \(f(n)\) 的最短周期来用 \(g\) 表示 \(f\),即:
我们现在似乎找到了反演公式的前半部分,我们现在发现,变换核是 \([d|n]\),我们要找到与之对应的反演核。
总之经过一批笔者也不知道怎么凑出来的过程,构造一个和上面 \((2)\) 很像的一个式子即:
其中 \(\mu(d)\) 就是我们说的莫比乌斯函数,其定义就是我们通常的定义。
我知道,你肯定在想怎么凑出来的,这到底有什么用呢?我们现在的步骤其实是在倒推,这是很难的,我花了好大功夫才弄清楚这个道理,数学上,我们想要一个通用的理论,我们会将其抽象,然后用类似于 C++ 模板实例化的方式将其化成具体的、特殊的理论,如果你在意这种自顶向下的思考方式,请阅读 偏序集上的莫比乌斯反演 - 洛谷专栏/《组合数学》,这要求您有抽象代数基础。本质上,这里的莫比乌斯反演是线性有序集上以可除性为偏序关系给出的。
其实这也是容斥,我们称这 \(\text{(B)}\) 为莫比乌斯反演。
我们有 \(\text{(7)}\),在 VFK PPT 里面的推导其实使用了:
额,这个跟 \((5)\) 是不是很像?咋回事呢。
这实际上是因为我们反演核和变换核的正交性实际上就是乘起来等于单位矩阵,单位矩阵就是 \([n=m]\) 咯,请回去对比一下 \((5)\) 的形式和 \((\text{A})\) 的系数?
令 \(A_{c, n} = [c \mid n],B_{m, c} = [m \mid c] \mu(\frac{c}{m})\),\((8)\) 就是 \(AB=I\),其中 \(I\) 表示单位矩阵。刚刚的过程就是求解 \(B=A^{-1}\)。
5. 再探一般化反演
如 \((4)\) 式,我们令 \(\mu(k,m)\) 满足:
则:
好吧 \(\mu\) 就是逆矩阵。在偏序集上,我们有求解它的方法,见 偏序集上的莫比乌斯反演 - 洛谷专栏。
6. 一些补充说明
上文中出现的莫比乌斯函数定义如下:
这样定义,是为了使 \((8)\) 成立。现证明 \((8)\) 成立:
显然,如至少存在一个 \(c\) 满足 \([c|n][m|c]=1\),那么 \(m|n\),不妨设 \(n=km\),那么 \((8)\) 的左边写作:
再设 \(c=dm\),那么有:
我笑嘻了,这不就是我们做莫比乌斯反演题中最常用的那个结论:
考虑 \(n\) 的质因子分解,即 \(n=\prod p_i^{c_i}\),由于有平方因子的因数贡献为 \(0\),所以,原式等价于在集合 \(S=\{p_1,p_2,p_3,\dots,p_n\}\) 中计算 \(\sum_{T\subseteq S}(-1)^{|T|}\),这考虑每种大小集合的贡献,可写为 \(\sum_{i=0}^{|S|}\binom{|S|}{i}(-1)^i\),这就是 \((2)\) 式给出的,所以原式等价于 \([|S|=0]\),即 \([d=1]\)。
那么原式等价于 \([k=1]\),又 \(n=km\),则等价于 \([n=m]\)。
7. 莫比乌斯反演的一个实例 UR #5C
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18903246

浙公网安备 33010602011771号