容斥/反演算法知识简述

前言

这只是一个比较基础的容斥/反演学习笔记。
包含了一大堆锅一些反演的基础知识点和证明过程。
如有不足之处希望大佬多加指点。

反演的定义和反演算法的基本原理

假设有两个函数\(f(x)\)\(g(x)\)满足$$f(n) = \sum_{k} a_{n, k} g(k)$$
已知\(f\)\(g\)的过程就叫做反演。
现在假设我们已经求出了\(g\)关于\(f\)的表达式$$g(n)=\sum_{k}\mu(n,k)f(k)$$
代入前式,我们有$$f(n)=\sum_{k}a_{n,k}\sum_{m}\mu(k,m)f(m)=\sum_{m}f(m)\sum_{k}a_{n,k}\mu(k,m)$$
那么只需要\(\sum_{k}a_{n,k}\mu(k,m)=[n=m]\)即可。
可以通过矩阵求逆直接求解\(\mu(n,m)\)
一些具有特殊系数的求和式,其\(\mu\)可以快速求出,为解题提供思路。

求反演式时,一般根据题意设\(g(n)\sum_{m}[n=m]g(m)\),然后将\([n=m]\)表达的式子代入求解,
整理后根据\(f\)\(g\)的关系式代入\(f(m)\)即求解完成。

二项式反演

\[f(n)=\sum_{m=0}^n\binom{n}{m}g(m) \]

我们知道\(\sum_{i=0}^{n}(-1)^i\binom{i}{n}=[n=0]\),那么由于\([n=m]=[n-m=0]\),
那么从求和式开始变换:

\[\begin{aligned} g(n)&=\sum_{m=0}^{n}[n-m=0]\binom{n}{m}g(m)\\ &=\sum_{m=0}^{n}\sum_{k=0}^{n-m}(-1)^k\binom{n-m}{k}\binom{n}{m}g(m)\\ &=\sum_{k=0}^{n}(-1)^k\binom{n}{k}\sum_{m=0}^{n-k}\binom{n-k}{m}g(m)\\ &=\sum_{k=0}^{n}(-1)^k\binom{n}{k}f(n-k)\\ \end{aligned} \]

于是有$$g(n)=\sum_{k=0}^{n}(-1)^{n-k}\binom{n}{k}f(k)$$

这个过程其实就是在说明:$$\sum_{m=k}^{n}(-1)^{m-k}\binom{n}{m}\binom{m}{k}=[n=k]$$

子集反演

\[f(S)=\sum_{T\subseteq S}g(T) \]

\(\sum_{i=0}^{n}(-1)^i\binom{i}{n}=[n=0]\)可以知道\(\sum_{T\subseteq S}(-1)^{|T|}=[S=0]\),这里\(0\)表示空集。

\[\begin{aligned} g(S)&=\sum_{T\subseteq S}[S-T=0]g(T)\\ &=\sum_{T\subseteq S}\sum_{Q\subseteq S-T}(-1)^{|Q|}g(T)\\ &=\sum_{Q\subseteq S}(-1)^{|Q|}\sum_{T\subseteq S-Q}g(T)\\ &=\sum_{Q\subseteq S}(-1)^{|Q|}f(S-Q)\\ \end{aligned} \]

于是有$$g(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}f(T)$$

这个过程其实就是在说明:$$\sum_{T\subseteq Q\subseteq S}(-1)^{|Q|-|T|}=[S=T]$$

多重子集反演

现在\(S,T\)变成了多重集。
定义\(\varphi(S)\),当\(S\)中包含重复元素时为\(0\),不包含时为\((-1)^{|S|}\)
那么同样有\(\sum_{T\subseteq S}\varphi(|T|)=[S=0]\)
类似上面的变换,可以得到$$g(S)=\sum_{T\subseteq S}\varphi(S-T)f(T)$$

反方向的子集反演

\[f(S)=\sum_{S\subseteq T}g(T) \]

\[\begin{aligned} g(S)&=\sum_{S\subseteq T}[T-S=0]g(T)\\ &=\sum_{S\subseteq T}\sum_{Q\subseteq T-S}(-1)^{|Q|}g(T)\\ &=\sum_{S\subseteq Q}(-1)^{|Q|-|S|}\sum_{Q\subseteq T}g(T)\\ &=\sum_{S\subseteq Q}(-1)^{|Q|-|S|}f(Q)\\ \end{aligned} \]

于是有

\[g(S)=\sum_{S\subseteq T}(-1)^{|T|-|S|}f(T) \]

子集卷积

\[c_S = \sum_{T \subseteq s} a_T b_{S-T} \]

对于子集反演,限制集合的大小进行转移即可。

简而言之,因为之前反方向的子集反演,我们可以处理出

\[c_r = \sum_{p,q}[p\ or\ q=r]a_pb_q \]

但如果直接照搬,会出现\(p,q\)有交的情况
因此需要限制集合大小,即求\(\sum_{|r|=k}c_r\)时,
对于\(p,q\)需要有\(p\ or\ q\)\(|p|+|q|=|r|\)
那么对于一类大小为\(i\)集合地进行\(i\)次这样的运算即可。故时间复杂度为\(O(n^2logn)\)

莫比乌斯反演

\[f(n)=\sum_{d}[d|n]g(d) \]

因为每个正整数都能根据质因子分解对应一个质数的多重集,你会发现这其实就是子集反演。
于是你突然发现再证下去没意思了
那么定义\(\mu(n)\),当\(n\)分解出重复质因数时为\(0\),否则为\((-1)^p\),其中\(p\)为质因子个数...
于是有\(\sum_{d|n}\mu(n)=[n=1]\)

\[\begin{aligned} g(n)&=\sum_{d|n}[\frac{n}{d}=1]g(d)\\ &=\sum_{d|n}\sum_{t|\frac{n}{d}}\mu(t)g(d)\\ &=\sum_{t|n}\mu(t)\sum_{d|\frac{n}{t}}g(d)\\ &=\sum_{t|n}\mu(t)f(\frac{n}{t})\\ \end{aligned} \]

于是有

\[g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d) \]

反方向的莫比乌斯反演

\[f(n)=\sum_{d}[n|d]g(d) \]

反方向的多重子集反演。

\[g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d) \]

单位根反演(离散傅里叶变换)

\begin{aligned}
f(n)&=\sum_{k=0}^{m-1}\epsilon^{nk}g(k)\
g(n)&=\frac{1}{m}\sum_{k=0}^{m-1}\epsilon^{-nk}f(k)
\end{aligned}
其中\(\epsilon=e^{-\frac{2\pi i}{m}}\)\(m\)次单位根,即\(\epsilon^m=1\);
本人线代太差,不会刚这个式子。有兴趣的大佬可以去这位神仙的博客看看。

这里反演的直接意义是\(DFT\)\(IDFT\)

还有一个这样的式子:

\[\frac{1}{m}\sum_{i=0}^{m-1}\epsilon^{ni}=[n\ mod\ m=0] \]

证明:当\(n\ mod\ m\not= 0\)时原式\(=\frac{\epsilon^{nm}-1}{\epsilon^n-1}=0\),当\(m|n\)\(\epsilon^n=1\)

斯特林反演

\[\begin{aligned} f(n)&=\sum_{k=0}^n \begin{Bmatrix}n\\k\\ \end{Bmatrix}g(k) \\ g(n)&=\sum_{k=0}^n(-1)^{n-k}\begin {bmatrix} n\\k \end{bmatrix}f(k)\\ \end{aligned} \]

根据上面的反演条件,我们只须考虑证明

\[\sum_{m=k}^{n}(-1)^{m-k}\begin{Bmatrix}n\\m\\\end{Bmatrix}\begin{bmatrix}m\\k\\\end{bmatrix}=[n=k] \]

这个公式叫做反转公式...
这个式子还有另一个形式,即$$\sum_{m=k}^{n}(-1)^{m-k}\begin{bmatrix}n\m\\end{bmatrix}\begin{Bmatrix}m\k\\end{Bmatrix}=[n=k]$$

也就是说,斯特林反演包含了不同方向的反演。
为表示简洁,这里只证其中一个。

我们考虑两类斯特林数和下降幂,上升幂的关系:

\[n^m=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\binom{n}{k}k!=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}n^{\underline{k}} \]

\[n^{\overline{m}}=\sum_{k=0}^{m}\begin{bmatrix}m\\k\\\end{bmatrix}n^k \]

其中\(n^{\underline{k}}\)表示\(n\)\(k\)阶下降幂,\(n^{\overline{k}}\)表示\(n\)\(k\)阶上升幂。

第一个式子由组合意义立得。使用数学归纳法证明第二个式子:

\[\begin{aligned} n^{\overline{m}}&=(n+m-1)n^{\overline{m-1}}\\ &=(n+m-1)\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^k\\ &=(m-1)\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^k+\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^{k+1}\\ &=\sum_{k=1}^{m}\begin{bmatrix}m-1\\k-1\\\end{bmatrix}n^k+(m-1)\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^k\\ &=\sum_{k=0}^{m}n^k(\begin{bmatrix}m-1\\k\\\end{bmatrix}+(m-1)\begin{bmatrix}m-1\\k-1\\\end{bmatrix})\\ &=\sum_{k=0}^{m}n^k\begin{bmatrix}m\\k\\\end{bmatrix}\\ \end{aligned} \]

证毕。

此时可以证明反转公式:

\[\begin{aligned} n^m&=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}n^{\underline{k}}\\ &=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}(-1)^k(-n)^{\overline{k}}\\ &=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}(-1)^k\sum_{i=0}^{k}(-n)^i\begin{bmatrix}k\\i\\\end{bmatrix}\\ &=\sum_{i=0}^{m}(-n)^i\sum_{k=i}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\begin{bmatrix}k\\i\\\end{bmatrix}(-1)^k\\ &=\sum_{i=0}^{m}n^i\sum_{k=i}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\begin{bmatrix}k\\i\\\end{bmatrix}(-1)^{k-i}\\ \end{aligned} \]

于是有\(\sum_{k=i}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\begin{bmatrix}k\\i\\\end{bmatrix}(-1)^{k-i}=[m=i]\)。证毕。

反转公式证明完毕,则斯特林反演的正确性也随之得到证明。

Min-max容斥(最值反演)

根据上面的定义,严格的说这玩意应该不属于反演,但它是非常重要的。

\[max\{S\}=\sum_{T\in S}(-1)^{|T|-1}min\{T\}$$考虑每个元素的出现次数即可证明。 把$max$和$min$交换即可得到另一个公式。 ## 在求lcm上的应用 $$lcm(a_1,a_2,...a_n)=\prod_{p}p^{max_{i=1}^{n}r_i}=\prod_{p}p^{\sum_{S\subseteq[n]}(-1)^{|S|-1}min_{i\in S}r_i}=\prod_{S\subseteq [n]}gcd(S)^{(-1)^{|S|-1}}\]

在期望中的应用

假设\(S\)中的元素都是随机变量,两边求期望并根据期望的线性性可以得到$$E(max{S})=\sum_{T\in S}(-1)^{|T|-1}E(min{T})$$假设这些随机变量表示一个元素出现的期望时间,且元素之间相互独立。
那么\(max\{S\}\)表示S中所有元素至少出现一次的期望时间,
\(min\{S\}\)表示S中至少出现一个元素的期望时间

一般而言\(min\{S\}\)好求而\(max\{S\}\)难求,此时通过最值反演即可解决问题。

Min-max容斥的一个扩展:k-min-max容斥

我们定义一个容斥系数\(f(x)\),使得

\[kmax\{S\}=\sum_{T\in S}f(|T|)min\{T\} \]

由于是线性变换,假设\(|T|=x+1\),考虑\(min\{T\}\)对答案的贡献,为\(\sum_{i=0}^{x}\binom{x}{i}f(i+1)\)
于是有$$[x=k-1]=\sum_{i=0}^{x}\binom{x}{i}f(i+1)$$

二项式反演可以得到:$$f(x+1)=\sum_{i=0}^{x}(-1)^{x-i}\binom{x}{i}[i=k-1]=(-1)^{x-k+1}\binom{x}{k-1}$$

于是容斥系数\(f(x)=(-1)^{x-k}\binom{x-1}{k-1}\)

因此$$kmax{S}=\sum_{T\in S}(-1)^{|T|-k}\binom{|T|-1}{k-1}min{T}$$

参考资料:
炫酷反演魔术
斯特林数-斯特林反演
min-max容斥及其推广

posted @ 2019-01-26 22:11  cjfdf  阅读(1089)  评论(6编辑  收藏