二项式反演

二项式反演

简介

二项式反演可以用来解决一些计数问题,是连接 至少/至多恰好 两类函数的桥梁。

形式一

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

证明

\(g(n)\) 入第一条式子。

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

考虑每一个 \(f(j)\) 的系数。

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

得证。

形式二

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

证明

\[h(n) = (-1)^n g(n) \]

所以

\[g(n) = (-1)^n h(n) \]

代入

\[f(n) = \sum_{i=0}^n (-1)^i \binom{n}{i} h(i) \]

由形式一

\[h(n) = \sum_{i=0}^n (-1)^i \binom{n}{i} f(i) \]

代回

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

形式三

\[f(n) = \sum_{i=m}^n \binom{n}{i} g(i) \\ g(n) = \sum_{i=m}^n (-1)^{n-i} \binom{n}{i} f(i) \]

不难发现同形式一、二相比只改变了下界,然而这并不影响任何性质。

形式四

\[f(n) = \sum_{i=n}^m \binom{i}{n} g(i) \\ g(n) = \sum_{i=n}^m (-1)^{i-n} \binom{i}{n} f(i) \]

证明

思路与形式一差不多。

重新证明一遍。

代入 \(g(n)\)

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

应用

其中,形式三、四是经常用到的。

P1595 信封问题

错位排列问题。

\(f(i)\) 表示恰有 \(i\) 个信封在正确的位置上。

\(g(i)\) 表示至少 \(i\) 个信封在正确的位置上。

容易求得

\[g(i) = \binom{n}{i}(n-i)! \]

并有如下关系

\[g(i) = \sum_{j=i}^n \binom{j}{i} f(j) \]

利用形式四进行二项式反演。

\[f(i) = \sum_{j=i}^n (-1)^{j-i} \binom{j}{i} g(j) \]

所求答案即为

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

P4491 [HAOI2018] 染色

首先 \(K\) 最大为 \(\min{(\frac{N}{S},M)}\)

恰好 出现 \(i\) 次的方案数为 \(f(i)\)

至少 出现 \(i\) 次的方案数为 \(g(i)\)

可以计算 \(g(i)\)

  • 首先选定 \(i\) 种颜色 乘上 \(\binom{M}{i}\)
  • 选定 \(iS\) 个位置 乘上 \(\binom{N}{iS}\)
  • 考虑内部顺序 乘上 \((iS)!\)
  • 内部顺序中,相同颜色交换算一种 除以 \((S!)^i\)
  • 剩下位置随意 \(N-iS\) 个位置 \(M-i\) 种颜色 乘上 \((M-i)^{n-iS}\)

\[g(i) = \frac{\binom{M}{i} \binom{N}{iS} (iS)! (M-i)^{n-iS}}{(S!)^i} \]

又有关系

\[g(i) = \sum_{j=i}^K \binom{j}{i} f(j) \]

根据形式四,二项式反演

\[f(i) = \sum_{j=i}^K (-1)^{j-i} \binom{j}{i} g(j) \]

答案为:

\[\sum_{i=0}^K W[i] f(i) \]

故需要快速的求出所有的 \(f(i)\)

我们可以在 \(O(n)\) 的时间复杂度内预处理出所有的 \(g\)

如果暴力求 \(f(i)\) 时间复杂度来到 \(O(n^2)\)

尝试卷积,拆开组合数

\[\begin{aligned} f(i) &= \sum_{j=i}^K (-1)^{j-i} \frac{j!}{i!(j-i)!} g(j) \\ &= \frac{1}{i!}\sum_{j=i}^K \frac{(-1)^{j-i}}{(j-i)!} \cdot j! g(j) \end{aligned} \]

我们进行了分离的操作,可以尝试卷积。

\[A(i) = \frac{(-1)^i}{i!} \\ B(i) = i! g(i) \]

故有

\[f(i) = \frac{1}{i!}\sum_{j=i}^K A(j-i) \cdot B(j) \]

翻转 \(B\) 得到 \(C\),即令 \(B(i) = C(K-i)\)

翻转 \(f\) 得到 \(F\),即令 \(f(i) = F(K-i)\)

故有

\[F(K-i) = \frac{1}{i!}\sum_{j=i}^K A(j-i) \cdot C(K-j) \]

已经看出卷积的形式了,使用 NTT 卷积即可。

参考代码

posted @ 2024-05-30 20:16  DeepSeaSpray  阅读(7)  评论(1编辑  收藏  举报