二项式反演
简介
二项式反演可以用来解决一些计数问题,是连接 至少/至多
与 恰好
两类函数的桥梁。
形式一
\[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
卷积即可。