全机房最后一个会二项式反演的
二项式反演一般用于:至少几个的情况容易算出,要求恰好几个,可以由至少几个求出恰好几个
容斥
首先来看一个容斥
对于最简单的三个圆的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)
\]
证毕