二项式反演
二项式反演
设 \(f(n)\) 表示 \(n\) 个补集的交集大小,\(g(n)\) 表示 \(n\) 个原集的交集的大小。
\[f_n = \sum_{i=0}^n (-1)^i {n \choose i} g_i \Leftrightarrow g_n = \sum_{i=0}^n (-1)^i {n \choose i} f_i
\]
\[f_n = \sum_{i=0}^n {n \choose i} g_i \Leftrightarrow g_n = \sum_{i=0}^n (-1)^{n-i} {n \choose i} f_i
\]
\[f_k=\sum_{i=k}^n {i\choose k} g_i\Leftrightarrow g_k=\sum_{i=k}^n (-1)^{i-k} {i\choose k} f_i
\]
这里证明就只证明一下二式吧
\[f(n)=\sum\limits_{i=0}^n{n\choose i}g(i)\Leftrightarrow g(n)=\sum\limits_{i=0}^n(-1)^{n-i}{n\choose i}f(i)
\]
这个证明的话,就是直接带入法
将 \(f\) 式子带入到 \(g\) 的式子中,得到
\[g(n)=\sum_{i=0}^{n}(-1)^{n-i}{n\choose i}\sum_{j=0}^{i}g(j){i\choose j}
\]
我们将 \(j\) 的枚举提前,这个是反演的基本操作
\[g(n)=\sum_{j=0}^{n}g(j)\sum_{i=j}^{n}(-1)^{n-i}{n\choose i}{i\choose j}
\]
然后就直接把后面这个拆开
\[{n\choose i}{i\choose j}=\frac{n!}{i!(n-i)!}×\frac{i!}{j!(i-j)!}
\]
这个时候就直接把 \(i!\) 消掉,再上下同时乘上 \((n-j)!\) 就直接变成了下面的等式
\[{n\choose i}{i\choose j}={n\choose j}{n-j\choose n-i}
\]
直接在原来的式子中替换它
\[g(n)=\sum_{j=0}^{n}g(j)\sum_{i=j}^{n}(-1)^{n-i}{n\choose j}{n-j\choose n-i}
\]
那前面那个组合数已经和 \(i\) 没有关系了,直接提出来
\[g(n)=\sum_{j=0}^{n}{n\choose j}g(j)\sum_{i=j}^{n}(-1)^{n-i}{n-j\choose n-i}
\]
我们就直接吧后面那个 \(i\) 改一下从 \(i=0\) 枚举到 \(n-j\)然后就直接用二项式定理
\[g(n)=\sum_{j=0}^{n}{n\choose j}g(j)\sum_{i=0}^{n-j}(-1)^{i}{n-j\choose i}
\]
\[g(n)=\sum_{j=0}^{n}{n\choose j}g(j)(-1+1)^{n-j}
\]
后面的这个式子只有在 \(n=j\) 的时候才成立,所以得证