二项式反演

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

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

容斥

首先来看一个容斥

对于最简单的三个圆的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) ]

证毕

如初见 与初见
原文地址:https://www.cnblogs.com/HISKrrr/p/14503420.html