二项式反演入门
对于序列 \(\{f_n\}\) 和 \(\{g_n\}\),通过 \(f\) 计算出 \(g\) 叫做正演,通过 \(g\) 计算出 \(f\) 叫做反演。
形式
二项式反演讲的是:
\[g_n=\sum_{i=0}^n\binom{n}{i}f_i \Leftrightarrow f_n=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}g_i
\]
证明
将组合数展开得到:
\[\begin{aligned}
&g_n=\sum_{i=0}^n\binom{n}{i}f_i \\
&\Leftrightarrow g_n=\sum_{i=0}^n \frac{n!}{i!(n-i)!}f_i \\
&\Leftrightarrow \frac{g_n}{n!} = \sum_{i=0}^n \frac{1}{(n-i)!}\frac{f_i}{i!}
\end{aligned}
\]
考虑序列 \(\{f_n\}\),\(\{g_n\}\) 的指数生成函数 \(F(x),G(x)\)。上式是一个卷积的形式,写成指数生成函数就是 \(G(x)=e^xF(x) \Rightarrow F(x)=\frac{1}{e^x}G(x)\)。
将 \(e^{-x}\) 在 \(x=0\) 处泰勒展开得到 \(e^{-x} = \sum_{i=0}^n (-1)^i \dfrac{x^i}{i!}\),和 \(G(x)\) 卷起来得到
\[\begin{aligned}
&F(x)=\sum_{k=0}^n\sum_{i=0}^k(-1)^{k-i}\frac{1}{(k-i)!}\frac{g_i}{i!}x^k \\
&\Rightarrow \frac{f_n}{n!}=\sum_{i=0}^n(-1)^{n-i}\frac{1}{(n-i)!}\frac{g_i}{i!} \\
&\Rightarrow f_n=\sum_{i=0}^n(-1)^{n-i} \frac{n!}{i!(n-i)!}g_i=\sum_{i=0}^n(-1)^{n-i} \binom{n}{i} g_i
\end{aligned}
\]
证毕。
应用
错位排序
求满足 \(a_i \neq i\) 的 \([1,n]\) 的排列数。
设 \(D(n)\) 表示长度为 \(n\) 的序列的错排数,通过枚举错排位置可得:
\[n! = \sum_{i=0}^n \binom{n}{i}D(i)
\]
显然可以二项式反演,得到:
\[\begin{aligned}
D(n) &= \sum_{i=0}^n (-1)^{n-i} \binom{n}{i} i! \\
&= \sum_{i=0}^n (-1)^{n-i} \frac{n!}{i!(n-i)!}i! \\
&= \sum_{i=0}^n (-1)^{n-i} \frac{n!}{(n-i)!} \\
&= n!\sum_{i=0}^n (-1)^i \frac{1}{i!}
\end{aligned}
\]
第二类斯特林数
第二类斯特林数 \(\begin{Bmatrix} n \\ k\end{Bmatrix}\),表示将 \(n\) 个互不相同的元素分成 \(k\) 个互不区分的非空子集的方案数。
- 注意到这里元素互不相同,所以不可以直接插板!
- 以下内容可以直接使用容斥原理直接得出。
定义 \(g_n\) 表示允许空集的方案数,\(f_n\) 为不允许空集的方案数(此处集合互相区分),显然,每个数都有 \(k\) 种选择,共 \(k^n\) 种。
枚举 \(k\) 个集合中的空集,剩下的非空,加起来得到 \(g_n\),即:
\[g_k = \sum_{i=0}^k \binom{k}{i} f_{k-i}
\]
对其进行二项式反演,得到:
\[\begin{aligned}
f_k &= \sum_{i=0}^k (-1)^{k-i} \binom{k}{i} g_i \\
&= \sum_{i=0}^k (-1)^{k-i} \frac{k!}{i!(k-i)!} i^n
\end{aligned}
\]
由于这里 \(f_n\) 集合是相互区分开的,我们最后要除去集合间的排列,得到
\[\begin{Bmatrix} n \\ k\end{Bmatrix} = \frac{f_k}{k!} = \sum_{i=0}^k (-1)^{k-i} \frac{i^n}{i!(k-i)!} = \sum_{i=0}^k \frac{(-1)^{k-i}}{(k-i)!} \frac{i^n}{i!}
\]
注意到这里还是个卷积,可以跑多项式 \(O(n\log n)\) 求。
将这个式子带回,得到
\[g_k = k^n = \sum_{i=0}^k \frac{k!}{i!(k-i)!} \begin{Bmatrix} n \\ k\end{Bmatrix}i! =\sum_{i=0}^k \mathrm{P}_n^k\begin{Bmatrix} n \\ k\end{Bmatrix}
\]

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号