Loading

二项式反演入门

对于序列 \(\{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} \]

posted @ 2021-08-08 21:52  LewisLi  阅读(200)  评论(0)    收藏  举报