二项式反演学习笔记

· · 个人记录

前置知识

二项式定理:(a+b)^n=\sum_{i=0}^n\binom{n}{i}a^ib^{n-i}

二项式反演

反演公式1:

f(n) = \sum_{i=0}^n\binom{n}{i}g(i) \iff g(n)=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i)

证明:

\begin{aligned} \sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i) &= \sum_{i=0}^n(-1)^{n-i}\binom{n}{i}\sum_{j=0}^i\binom{i}{j}g(j)\\ &= \sum_{j=0}^ng(j)\sum_{i=j}^n(-1)^{n-i}\binom{n}{i}\binom{i}{j}\\ \end{aligned}

然后我们需要应用到组合数的一个结论:

\binom{n}{i}\binom{i}{j}=\binom{n}{j}\binom{n - j}{i - j}

尝试用组合意义理解:我们要在 n 个数中选一个 i 元子集 A,再选一个属于 Aj 元子集 B,左边就是先选 A 再选 B,右边是先选 B 再选 A,所以两者相等。

所以:

\begin{aligned} \sum_{j=0}^ng(j)\sum_{i=j}^n(-1)^{n-i}\binom{n}{i}\binom{i}{j} &=\sum_{j=0}^ng(j)\sum_{i=j}^n(-1)^{n-i}\binom{n}{j}\binom{n-j}{i-j}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=j}^n(-1)^{n-i}\binom{n-j}{i-j}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=0}^{n-j}(-1)^{n-(i+j)}\binom{n-j}{(i+j)-j}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=0}^{n-j}(-1)^{(n-j)-i}\binom{n-j}{i}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}(1-1)^{n-j}\\ &=g(n) \end{aligned}

得证。

反演公式2:

f(n)=\sum_{i=0}^n\binom{n}{i}(-1)^{i}g(n) \iff g(n)=\sum_{i=0}^n\binom{n}{i}(-1)^{i}f(n)

反演公式3:

f(k)=\sum_{i=k}^n\binom{i}{k}g(i) \iff g(k)=\sum_{i=k}^n(-1)^{i - k}\binom{i}{k}f(i)

应用

关键:要求 g(n),尝试找到 f(n) = \sum_{i=0}^n\binom{n}{i}g(i)f(n) 便于计算,然后用反演求出 g(n)

题目1: 求错排数。

思路:

这个经典问题可以用二项式反演来做。

我们让 f_n=n!D_n 表示错排数。

则会有:

f_n=\sum_{i=0}^n\binom{n}{i}D_i

还是组合意义来理解,每个排列都有若干个位置满足 p_i=i,我们先枚举有多少个位置,再枚举哪些位置,剩下的必然是错排了。

于是我们可以直接二项式反演:

\begin{aligned} D_n &=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f_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\frac{(-1)^{n-i}}{(n-i)!}\\ &=n!\sum_{i=0}^n\frac{(-1)^{i}}{i!}\\ \end{aligned}

题目2:n 个格子排成一行,需要用 k 种颜色染色,要求两两不同色且每种颜色至少出现一次。求方案数。

思路:

我们设 f_k 表示用 k 种颜色染色两两不同色,但是不要求每种颜色至少出现一次。

再设 g_k 表示表示用 k 种颜色染色两两不同色,要求每种颜色至少出现一次。

于是我们有:

f_k=\sum_{i=0}^k \binom{k}{i}g_i

如何理解?首先对于任何一种染色方案,我们必然是选取了 k 颜色的一个子集去染,枚举选了哪些子集即可。

至于 f_k,这其实是 HNOI越狱 这题,我们可以知道 f_k=k(k-1)^{n-1},于是:

g_k=\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}i(i-1)^{n-1}

然后就做完了。

题目3: 求第二类斯特林数。

思路:

首先假设盒子有区别。

同理,f_k 表示盒子可以为空,g_k 表示盒子不能为空,可以得到:

f_k = \sum_{i=0}^k\binom{k}{i}g_i

又由于 f_k = k^m,所以反演一下就能得到答案。