反演笔记
反演
反演
若已知 \(f(n) = \sum g(k)\),用 \(f\) 表示 \(g\) 的过程就叫“反演”。
二项式反演
参考一下邓老师的 PPT。
经典题:\(n\) 个元素错排的方案数。要求线性。
考虑枚举有 \(k\) 个人非错排,可以得到这 \(k\) 个人一共有 \(\dbinom{n}{k}\) 种选法,剩下的人有 \((n - k)\) 个,都是随便站。总方案就是 \(\dbinom{n}{k} \times (n - k)!\) 但是显然会有重复。因此我们容斥,可以得到:
下面是重要的性质:
\(\mathbf{Important \ Lemma}\):
\[\sum_{k = 0}^{n} (-1)^k \binom{n}{k} = [n == 0] \]
这个引理也很好理解:杨辉三角带符号行求和,由于其对称性显然为 \(0\)。
我们考虑设 \(f(n)\) 表示 \(n\) 个人随便站的方案数,这个显然是很好求的。设 \(g(n)\) 表示 \(n\) 个人错排的方案数,我们上面已经求了。用 \(f(n - k)\) 换掉 \((n - k)!\) 可以得到:
我们不妨换一个角度考虑。我们用 \(g\) 表示 \(f\)。我们枚举有 \(k\) 个人错位了,可以得到:
- 这两个式子有什么关系呢?首先显然有:
- 回忆 Important Lemma,有
- 我们注意到 \(\dbinom{n - m}{k}\dbinom{n}{m}\) 和 \(\dbinom{n}{k} \dbinom{n - k}{m}\) 实际上是等价的,因为都等价于将一个集合划分成两个不交子集。所以有:
我们惊奇的发现,右面的一坨就等于 \(f(n - k)\)!
- 把下标换的好看一点,就得到:
二项式反演形式一
基于上面的推导,我们可以得到:
这就是二项式反演?
二项式反演形式二
这个式子非常对称。下面证明一下:不妨设 \(h(n) = (-1) ^ n g(n)\)。那么有:
- 根据形式一,可以得到:
- 把 \((-1) ^ k\) 除过去就可以得到:
二项式反演形式三
二项式反演形式四
这两种形式大概不需要过多解释了。
例题
有 \(n\) 个集合,要选出子集集合 \(\{S_i\}\),使得 \(|S_1 \bigcap S_2 \bigcap \cdots \bigcap S_n| = k\)。求方案数。
-
使用二项式反演的关键在于构造两个函数 \(f, g\),并且使得 \(f\) 比较好求。
-
不妨设 \(f(x)\) 表示钦定 \(x\) 个数必须选,剩下的随便选,选出子集的方案数。显然,我们要选出这 \(x\) 个数,剩下的数选或不选构成子集,子集选或不选再构成方案。所以 \(f(x) = \dbinom{n}{x} \left(2 ^ {2 ^ {n - x}} - 1\right)\)。
-
不妨设 \(g(x)\) 表示选出子集交集大小为 \(x\) 的方案数。显然 \(g(k)\) 即为我们所求。我们寻求 \(f, g\) 之间的关系,可以得到:
根据二项式反演形式三,可以得到:
这样可以做到线性。
\(\mathcal{Tip}\):在做二项式反演相关问题时,一般会”钦定“、”恰好选择“或”选择大于若干个“。
长度为 \(n\) 个序列,每个位置可以染 \(1 \sim m\) 的颜色。若出现次数为 \(s\) 的颜色种数为 \(k\) 则获得 \(w_k\) 的代价。求所有染色方案的权值和。
按照套路,不妨设\(f(x)\) 为钦定了 \(x\) 中颜色必须选的方案数,\(g(x)\) 为出现次数为 \(s\) 的颜色种数恰好为 \(x\) 的方案数。首先不难得到:
根据二项式反演形式三不难得到:
现在关键是 \(f\) 怎么求。首先要从 \(m\) 中颜色中选出钦定的那些,然后从 \(n\) 个位置选出一些把他们填上,然后再算上顺序,可以得到:

浙公网安备 33010602011771号