二项式反演与斯特林反演

1 二项式反演

1.1 引入

二项式反演与容斥原理有着很大的联系,在很大程度上二项式反演可以实现容斥的效果。

我们先从基础的容斥原理讲起,首先二元的容斥形式非常简单,如下:

\[|A\cup B|=|A|+|B|-|A\cap B| \]

更一般的,我们有:

\[|A_1\cup A_2\cup\cdots\cup A_n|=\sum_{1\le i\le n} |A_i|-\sum_{1\le i<j\le n} |A_i\cap A_j|+\cdots+(-1)^{n-1}\times |A_1\cap A_2\cap \cdots \cap A_n| \]

这就是容斥原理。

证明:设某一个元素被 \(m\) 个集合包含,则其对等号左边贡献为 \(1\),对右边的贡献为:

\[\begin{aligned} \sum_{i=1}^m (-1)^{i-1}\binom {m}{i}&=-\sum_{i=1}^m (-1)^i\binom mi\\ &=1-\sum_{i=0}^m\binom mi (-1)^i\\ &=1-(1-1)^m\\ &=1 \end{aligned} \]

所以每个元素对等式左右两边的贡献相等。

1.2 基本形式

1.2.1 形式零

首先我们可以直接从容斥原理推出二项式反演的形式零。记 \(\overline{A}\) 表示 \(A\) 在全集 \(U\) 下的补集,由集合基本知识:

\[\begin{aligned} |U|-|\bigcap_{i=1}^n \overline{A_i}|=|\bigcup_{i=1}^n A_i|\\ |U|-|\bigcup_{i=1}^n \overline{A_i}|=|\bigcap_{i=1}^n A_i|\\ \end{aligned} \]

可以得到:

\[\begin{aligned} |\overline{A_1}\cup \overline{A_2}\cup\cdots\cup \overline{A_n}|=|U|-\sum_{1\le i\le n} |A_i|+\sum_{1\le i<j\le n} |A_i\cap A_j|+\cdots+(-1)^{n}\times |A_1\cap A_2\cap \cdots \cap A_n|\\ |A_1\cup A_2\cup\cdots\cup A_n|=|U|-\sum_{1\le i\le n} |\overline{A_i}|+\sum_{1\le i<j\le n} |\overline{A_i}\cap \overline{A_j}|+\cdots+(-1)^{n}\times |\overline{A_1}\cap \overline{A_2}\cap \cdots \cap \overline{A_n}| \end{aligned} \]

考虑一种特殊的情况,即集合的交集大小只和集合的数量有关,那么我们可以令:

  • \(f(n)=|A_1\cap A_2\cap \cdots \cap A_n|\)
  • \(g(n)=|\overline{A_1}\cap \overline{A_2}\cap \cdots \cap \overline{A_n}|\)

根据上面两个式子不难得到:

\[\begin{aligned} 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) \end{aligned} \]

显然两者等价且可以互相推导,于是我们可以得出二项式反演的形式零

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

1.2.2 形式一

上面的的形式零并不常见,更常用的形式需要我们做一些变形。

设两个函数 \(f(n),h(n)\) 满足形式零,然后令 \(g(n)=h(n)(-1)^n\),则形式零会变为:

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

移项可得:

\[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) \]

我们给等式右边除以 \((-1)^{2i}\),由于 \(2i\) 一定为偶所以不改变正负性,然后我们就可以得到二项式反演的形式一

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

1.2.3 形式二

形式一中的和式是对 \(0\sim n\) 求和,那么如果对于 \(n\sim m\) 求和就可以得到二项式反演的形式二

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

证明:直接将右式代入左式可得:

\[\begin{aligned} f(n)&=\sum_{i=n}^m \binom{i}{n}\sum_{j=i}^m (-1)^{j-i}\binom ji f(j)\\ &=\sum_{i=n}^m\sum_{j=i}^m \binom{i}{n} (-1)^{j-i}\binom ji f(j)\\ &=\sum_{j=n}^m f(j)\sum_{i=n}^j (-1)^{j-i}\binom{i}{n}\binom ji \\ &=\sum_{j=n}^m f(j)\sum_{i=n}^j (-1)^{j-i}\binom{j-n}{j-i}\binom jn\\ &=\sum_{j=n}^m \binom jnf(j)\sum_{i=n}^j (-1)^{j-i}\binom{j-n}{j-i}\\ &=\sum_{j=n}^m \binom jnf(j)\sum_{i=0}^{j-n} \binom{j-n}{i}(-1)^{i}\\ &=\sum_{j=n}^m \binom jnf(j)(1-1)^{j-n}\\ &=\sum_{j=n}^m \binom jnf(j)[j=n]\\ &=\binom nnf(n)\\ &=f(n)\\ \end{aligned} \]

于是原式成立。

1.3 例题

例 1 [BZOJ4665] 小 w 的喜糖

\(\text{Link}\)

首先我们先认为相同的糖是不同的,这样算出答案之后乘上 \(\prod \tfrac{1}{c_i!}\) 即可,其中 \(c_i\) 为第 \(i\) 种颜色个数。

接下来考虑二项式反演,令 \(f(i)\) 表示至少 \(i\) 个人拿到的糖与原先的种类相同的方案数,\(g(i)\) 表示恰有 \(i\) 个人拿到的糖与原先种类相同的方案数,根据二项式反演可得:

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

于是只需求出 \(f(i)\) 即可,我们考虑 dp 求出它。设 \(dp(i,j)\) 表示枚举到第 \(i\) 种颜色,钦定了 \(j\) 个人拿到的糖与原先种类相同,转移为:

\[dp(i,j)=\sum_{p=0}^{\min(j,c_i)}dp(i-1,j-p)\times \binom{c_i}{p}\times {c_i}^{\underline{p}} \]

\(f(i)\) 就等于 \(dp(m,i)\times (n-i)!\),代入求出 \(g(0)\) 即可,复杂度 \(O(n^2)\)

通过此例不难发现,“至少” 转 “恰好” 是二项式反演的一个重要运用场合。

2 斯特林反演

前置知识:斯特林数相关。

2.1 基本形式及证明

斯特林反演的基本形式与二项式反演类似,如下:

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

为了证明这个定理,我们需要先证明一个引理,称为反转公式:

\[\begin{aligned} \sum_{k=m}^n (-1)^{k-m}{n\brace k} {k\brack m} =[m=n]\\ \sum_{k=m}^n (-1)^{n-k}{n\brack k} {k\brace m}=[m=n] \end{aligned} \]

我们将 \(m^n\) 转化为下降幂的形式,然后再将下降幂转回普通幂:

\[\begin{aligned} m^n&=\sum_{i=0}^n {n\brace i}m^{\underline i}\\ &=\sum_{i=0}^n {n\brace i}\sum_{j=0}^i (-1)^{i-j}{i\brack j}m^j\\ &=\sum_{i=0}^n m^i\sum_{j=i}^n (-1)^{j-i}{j\brack i}{n\brace j}\\ \end{aligned} \]

为了使左右两边相等,我们需要满足 \(\sum\limits_{j=i}^n (-1)^{j-i} {j\brack i}{n\brace j}\) 只有在 \(i=n\) 时取到 \(1\),其余时候都取 \(0\),即它的值是 \([i=n]\)。重新换元后即可得到:

\[\sum_{k=m}^n (-1)^{k-m}{n\brace k} {k\brack m} =[m=n] \]

对于下面的式子,我们将 \(m^{\underline{n}}\) 转化为普通幂的形式,再转化回下降幂的形式:

\[\begin{aligned} m^{\underline{n}}&=\sum_{i=0}^n (-1)^{n-i} {n\brack i}m^i\\ &=\sum_{i=0}^n (-1)^{n-i} {n\brack i}\sum_{j=0}^i{i\brace j} m^{\underline{j}}\\ &=\sum_{i=0}^n m^{\underline{i}} \sum_{j=i}^n(-1)^{n-j}{n\brack j}{j\brace i} \\ \end{aligned} \]

同上,只有当 \(\sum_{j=i}^n(-1)^{n-j}{n\brack j}{j\brace i}=[i=n]\) 时两边才能取等,换元后即可得到下面的式子。

接下来我们证明反演公式,先证 \(\Leftarrow\),若 \(g(n)=\sum\limits_{i=0}^n (-1)^{n-i} {n\brack i} f(i)\),则有:

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

接下来证明 \(\Rightarrow\),若 \(f(n)=\sum\limits_{i=0}^n {n\brace i} g(i)\),则有:

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

于是斯特林反演的公式得证。

同理,斯特林反演还有另一种形式:

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

这与二项式反演的形式二也是相似的。

2.2 例题

例 1 [BZOJ4671] 异或图

\(\text{Link}\)

\(f(n)\) 表示将原图划分为至少 \(n\) 个互不相连的部分的方案数,$g(n) $ 表示将原图划分为 \(n\) 个联通块的方案数。那么我们显然会有:

\[f(n)=\sum_{i=n}^N {i\brace n} g(i) \]

意思是将 \(i\) 个联通块划分成 \(n\) 个部分,显然这 \(n\) 个部分之间一定互不相连,根据斯特林反演可得:

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

于是我们求出 \(f(n)\) 即可求出最终答案。考虑怎样求 \(f(n)\),由于我们的点数只有 \(10\),所以我们完全可以直接爆搜,将这些点分成 \(n\) 个部分。接下来我们只需要让这 \(n\) 个部分之间没有连边即可。将每一张图上这 \(n\) 个部分的连边保存下来,其余的置为 \(0\),现在的问题就是求有多少种方案使得选出来的图的异或和为 \(0\)

显然这是线性基可以求解的问题,将所有数插入线性基,设成功了 \(k\) 次,则贡献即为 \(2^{s-k}\)。然后求出 \(f(n)\) 后代入公式求出 \(g(1)\) 即为答案。

posted @ 2025-01-23 19:42  UKE_Automation  阅读(116)  评论(0)    收藏  举报