[数论] 二项式反演

菜就多练,输不起就别玩,不会就是不会。

二项式推论

  • \(1.\) \(\tbinom{n}{m}=\tbinom{n}{n-m}\)
  • \(2.\) \(\tbinom{n}{m}=\frac{n}{m}\tbinom{n-1}{m-1}\)
  • \(3.\) \(\sum\limits_{i=0}^nC_n^i=2^n\)
    证明:拆 \((1+1)^n\)
  • \(4.\) \(\sum\limits_{i=0}^n (-1)^iC_n^i=0\)
    特殊的,\(n=0\),上式等于 \(1\)
    证明:拆 \((1-1)^n\)

这些是基础的,还有后面会说。

二项式反演

形式一

\[g(n)=\sum\limits_{i=0}^n(-1)^if(i)C_n^i\Leftrightarrow f(n)=\sum\limits_{i=0}^n(-1)^ig(i)C_n^i \]

证明:
考虑一个全集 \(U=\{a_1,a_2,a_3...a_n\}\)
我们定义 \(f(i)\) 表示满足 \(i\) 个条件的方案数(求什么方案看题目定)。
我们定义 \(g(i)\) 表示不满足 \(i\) 个条件的方案数。
根据 \(f\)\(g\)\(g(n)=\sum\limits_{i=0}^n(-1)^if(i)C_n^i\)
根据容斥原理,上式得证。
根据 \(g\)\(f\)\(f(n)=\sum\limits_{i=0}^n(-1)^ig(i)C_n^i\)
上式得证。

举个例子,我们要算满足条件 \(a_1,a_2,a_3\) 的,应该加上所有方案,减去不满足 \(a_1\)\(a_2\)\(a_3\) 的,加上不满足 \(a_1,a_2\)\(a_1,a_3\)\(a_2,a_3\) 的。再加上三次的。

然后同理可证另一个。
这个式子好像没什么用。

形式二

\(g_n=\sum\limits_{i=0}^nC_n^if_i\Leftrightarrow f_n=\sum\limits_{i=0}^n(-1)^{n-i}C_n^ig_i\)

我们来理解理解这个式子。
原理是这个:\(\sum\limits_{i=0}^nC_n^i=[n=0]\)
\(f_i\) 表示条件恰好满足 \(i\) 个的方案,\(g_i\) 表示至多满足 \(i\) 个条件的方案。

换句话说,左边求的就是所有满足 \(n\) 个条件即以内的情况。

我们追踪一部分变量来理解这个问题。
假设现在有 \(6\) 个条件 \(a_1,a_2,a_3,a_4,a_5,a_6\),我们现在想把 \(3\) 个条件的给减掉。比如说 \(a_1,a_2,a_3\)
这个条件最终的贡献是 :\(C_3^3-C_3^2+C_3^1-C_3^0=0\)

那一个条件 \(a_1\) 呢?
贡献是 \(C_5^5-C_5^4+C_5^3-C_5^2+C_5^1-C_5^0=0\)

那六个条件呢?
我们知道 \(C_0^0=1\) ,所以归纳一下,只剩下 \(f_6\) 了。

所以其实这就是一种特殊的容斥。

形式三

\(g_n=\sum\limits_{i=n}^mC_i^nf_i\Leftrightarrow f_n=\sum\limits_{i=n}^m(-1)^{i-n}C_i^ng_i\)
其中 \(f_i\) 表示恰好满足 \(i\) 个条件方案数。
\(g_i\) 表示钦定满足 \(i\) 个条件方案数。

我们分析一下。
假设有 \((a_1,a_2,a_3,a_4)\) 我们算一下 \(f\)\(g\)
我们算一下:
\(f_2:\)
\(\{a_1,a_2\},\{a_2,a_3\},\{a_3,a_4\},\{a_1,a_3\},\{a_1,a_4\},\{a_2,a_4\}\)
\(g_2:\)
\(\{a_1,a_2\}:\{a_1,a_2\},\{a_1,a_2,a_3\},\{a_1,a_2,a_4\},\{a_1,a_2,a_3,a_4\}...\)

综上,我们得出通过 \(f\)\(g\) 的公式:
\(g_n=\sum\limits_{i=n}^mC_i^nf_i\)

现在看看怎么用 \(g\)\(f\)

我们跟踪一下 \(a_1,a_2,a_3,a_4\)
首先,在 \(i=2\) 时,我们加上贡献,它被加了 \(C_2^2\times C_4^2\) 次。
然后,在 \(i=3\) 时,我们减去贡献,它被减了 \(C_3^2\times C_4^3\) 次。
最后,在 \(i=4\) 时,我们加上贡献,它被加了 \(C_4^2\times C_4^4\) 次。
我们发现它刚好等于 \(0\)

我们再跟踪一下 \(a_1,a_2,a_3,a_4,a_5\)
\(i=2:+C_2^2\times C_5^2\)
\(i=3:-C_3^2\times C_5^3\)
\(i=4:+C_4^2\times C_5^4\)
\(i=5:-C_5^2\times C_5^5\)

我们知道,\(C_i^j\times C_j^k=C_i^k\times C_{i-j}^{j-k}\)

所以上式为 \(0\)

好了你已经学会二项式反演了,现在我们做做几个题。

错排问题

问题:有多少个长度为 \(n\) 的排列 \(p\) 满足 \(\forall i,p_i\ne i\)

我们知道恰好 \(n\) 个位置 \(p_i\ne i\) 非常难求。我们换个思路:至多 \(n\)\(p_i\ne i\),怎么求?

我们设恰好为 \(f\),至多为 \(g\)

显然,我们知道 \(f\) 很简单能求出 \(g\)\(g(n)=\sum\limits_{i=0}^nf(i)\times C_n^i\)

所以我们直接二项式反演。

我们看看怎么求至多 \(k\) 个位置满足 \(p_i\ne i\)

一眼顶针,不就是 \((k)!\) 吗。

然后上反演即可。

第二类斯特林数

问题:把 \(n\) 个不同的小球放入 \(m\) 个不同的盒子里,要求每个盒子非空,有多少种放法?

我们定义 \(f_i\) 表示恰好 \(i\) 个格子为空,\(g_i\) 表示钦定 \(i\) 个格子为空。

那么我们能求出 \(f_k=(m-k)^n\)。直接反演即可。

总结: 形式一的g和形式二的g虽然都是恰好,但不太一样,形式一的g是恰好满足某几个特定的性质,而形式的g是恰好满足多少个性质的总和。

posted @ 2024-05-12 19:52  g1ove  阅读(15)  评论(0编辑  收藏  举报