[数论] 二项式反演
菜就多练,输不起就别玩,不会就是不会。
二项式推论
- \(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\)
这些是基础的,还有后面会说。
二项式反演
形式一
证明:
考虑一个全集 \(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是恰好满足多少个性质的总和。