全机房最后一个会二项式反演的
二项式反演一般用于:至少几个的情况容易算出,要求恰好几个,可以由至少几个求出恰好几个
容斥
首先来看一个容斥
对于最简单的三个圆的venn图, 对于所有集合的并:
[|A|cup|B|cup |C| = |A| + |B| + |C| - |A cap B| - |A cap C| - |B cap C| + |A cap B cap C|
]
考虑这个容斥的含义是什么:
首先先让三个集合各自的大小加起来, 然后发现可能会有重复, 所以将重复减去, 但是对于同一块重复, 可能会减多次, 所以再加回来
将这个容斥扩展到任意圆显然也是可行的,所以我们得到了一个更一般的形式
[|A_1cup A_2cup...cup A_n|=sumlimits_{1le ile n}|A_i|-sumlimits_{1le i<jle n}|A_icap A_j|+...+(-1)^{n-1} imes |A_1cap A_2cap ...cap A_n|
]
参照三个圆的情况的含义理解, 全部加起来,减去重的,加上减重的,一直这样处理到所有圆的交,得到的就是所有圆的交
形式化的证明:如果某一个元素被(m)个集合所包含,则其对于左侧的贡献为1,对于右侧的贡献为:
[sum_{i=1}^{m} (-1)^{i-1} {mchoose 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^ccap A_2^ccap ...cap A_n^c|=|S|-sumlimits_{1le ile n}|A_i|+sumlimits_{1le i<jle n}|A_icap A_j|-...+(-1)^n imes |A_1cap A_2cap ...cap A_n|
]
如果以(A_i^c)的补集替换掉(A_i^c)?
根据补集的补集就是原集:
[|A_1cap A_2cap ...cap A_n|=|S|-sumlimits_{1le ile n}|A_i^c|+sumlimits_{1le i<jle n}|A_i^ccap A_j^c|-...+(-1)^n imes |A_1^ccap A_2^ccap ...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)=sumlimits_{i=0}^n{nchoose i}h(i)Leftrightarrow frac{h(n)}{(-1)^n}=sumlimits_{i=0}^n(-1)^i{nchoose i}f(i)
]
再将(h(n))视为(g(n))则有
[f(n)=sumlimits_{i=0}^n{nchoose i}g(i)Leftrightarrow g(n)=sumlimits_{i=0}^n(-1)^{n-i}{nchoose 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}^nsum_{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
eq 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)
]
证毕