二项式反演

全机房最后一个会二项式反演的

二项式反演一般用于:至少几个的情况容易算出,要求恰好几个,可以由至少几个求出恰好几个

容斥

首先来看一个容斥

对于最简单的三个圆的venn图, 对于所有集合的并:

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

考虑这个容斥的含义是什么:
首先先让三个集合各自的大小加起来, 然后发现可能会有重复, 所以将重复减去, 但是对于同一块重复, 可能会减多次, 所以再加回来

将这个容斥扩展到任意圆显然也是可行的,所以我们得到了一个更一般的形式

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

参照三个圆的情况的含义理解, 全部加起来,减去重的,加上减重的,一直这样处理到所有圆的交,得到的就是所有圆的交

形式化的证明:如果某一个元素被\(m\)个集合所包含,则其对于左侧的贡献为1,对于右侧的贡献为:

\[\sum_{i=1}^{m} (-1)^{i-1} {m\choose i} = -\sum_{i=1}^{m} (-1)^i {m \choose i} = 1-\sum_{i=0}^{m}(-1)^i{m \choose i} = 1-(1-1)^m = 1 \]

故右侧贡献也为1, 左侧等于右侧,证毕

反演

形式零

首先考虑如果将上面的计算转化为计算所有集合补集的交集?

显然所有集合的补集的交集一定等于全集所有集合的并集

则有

\[|A_1^c\cap A_2^c\cap ...\cap A_n^c|=|S|-\sum\limits_{1\le i\le n}|A_i|+\sum\limits_{1\le i<j\le n}|A_i\cap A_j|-...+(-1)^n\times |A_1\cap A_2\cap ...\cap A_n| \]

如果以\(A_i^c\)的补集替换掉\(A_i^c\)

根据补集的补集就是原集:

\[|A_1\cap A_2\cap ...\cap A_n|=|S|-\sum\limits_{1\le i\le n}|A_i^c|+\sum\limits_{1\le i<j\le n}|A_i^c\cap A_j^c|-...+(-1)^n\times |A_1^c\cap A_2^c\cap ...\cap A_n^c| \]

假定集合大小只与集合元素个数有关:

\(f(n)\)表示\(n\)个补集的交集大小,\(g(n)\)表示\(n\)个原集的交集大小

根据上面的式子有:

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

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

这两个式子显然是等价的

所以有

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

这就是二项式反演的初始形态

常用形式

\(h(n)=(-1)^ng(n)\),带入上面的式子就有

\[f(n)=\sum\limits_{i=0}^n{n\choose i}h(i)\Leftrightarrow \frac{h(n)}{(-1)^n}=\sum\limits_{i=0}^n(-1)^i{n\choose i}f(i) \]

再将\(h(n)\)视为\(g(n)\)则有

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

(tips:这里的新的\(g(n)\)是自己定义的函数,含义为上面的定义,并不一定符合实际含义,所以在实际运算中可能会出现一些定义的函数算重的情况,这时也可以直接套用公式

证明:

\(g(i)\)的式子带入左面,可以得到

\[f(n) = \sum_{i=0}^{n}(-1)^{i}{n \choose i} \sum_{j=0}^{i}(-1)^{j}{i \choose j}f(j) \]

大概化简一下可以得到

\[f(n) = \sum_{i=0}^n\sum_{j=0}^i (-1) ^{i-j}{n \choose i} {i \choose j} f(j) \]

转化一下求和符号得到

\[f(n) = \sum_{j=0}^{n} f(j) \sum_{i=j}^{n} (-1)^{i-j}{n \choose i} {i \choose j} \]

\({n \choose i} {i \choose j}\)的组合含义:\(n\)中选择\(i\)个,再从\(i\)个中选出\(j\)个,显然可以转化为先从\(n\)个中选出\(j\)个,再从\(n-j\)中选出\(i-j\)个,这两部分组成了\(i\)

所以原式变成

\[f(n) = \sum_{j=0}^{n} f(j) \sum_{i=j}^{n} (-1)^{i-j}{n \choose j} {n-j \choose i-j} \]

\(t=i-j\) 则有

\[f(n) = \sum_{j=0}^{n} {n \choose j} f(j) \sum_{t=0}^{n-j} (-1)^{t}{n-j \choose t} \]

\[f(n) = \sum_{j=0}^{n} {n \choose j} f(j) (1-1)^{n-j} \]

\(n-j=0\)时,不能化成最后一步,从上面的式子得到:

\[f(n) = \sum_{j=0}^{n} {n \choose j} f(j) \]

\(n-j\neq 0\)时,则\((1-1)^{n-j}=0\),故原式等于\(0\)

所以

\[f(n) = \sum_{j=0}^{n} {n \choose j} f(j) [j=n] \]

\[f(n) = {n \choose n} f(n) = f(n) \]

证毕

posted @ 2021-03-09 06:38  HISKrrr  阅读(89)  评论(0编辑  收藏  举报