二项式反演-学习笔记

定义

如果两个函数g,f满足: g ( n ) = ∑ i = 1 n C n i f ( i ) g(n)=\sum_{i=1}^{n}C_{n}^{i}f(i) g(n)=i=1nCnif(i)

那么 f ( n ) = ∑ i = 1 n ( − 1 ) n − i C n i g ( i ) f(n)=\sum_{i=1}^{n}{(-1)^{n-i}C_{n}^{i}g(i)} f(n)=i=1n(1)niCnig(i)

证明

以上推下为例:

1.将g函数表达式代入:

f ( n ) = ∑ i = 1 n ( − 1 ) n − i ∗ C n i ∗ [ ∑ j = 1 i C i j ∗ f ( i ) ] f(n)=\sum_{i=1}^{n}{(-1)^{n-i}*C_{n}^{i}*[\sum_{j=1}^{i}{C_{i}^{j}}*f(i)]} f(n)=i=1n(1)niCni[j=1iCijf(i)]

2.转换枚举对象

= ∑ j = 1 n f ( j ) ∗ ∑ i = j n ( − 1 ) n − i C n i C i j =\sum_{j=1}^{n}{f(j)*\sum_{i=j}^{n}{(-1)^{n-i}C_{n}^{i}C_{i}^{j}}} =j=1nf(j)i=jn(1)niCniCij

所以问题就转变成了证明: ∑ i = j n ( − 1 ) n − i C n i C i j = = [ j = n ] \sum_{i=j}^{n}{(-1)^{n-i}C_{n}^{i}C_{i}^{j}} == [j=n] i=jn(1)niCniCij==[j=n]

∑ i = j n ( − 1 ) n − i C n i C i j \sum_{i=j}^{n}{(-1)^{n-i}C_{n}^{i}C_{i}^{j}} i=jn(1)niCniCij

= ∑ i = j n ( − 1 ) n − i ∗ n ! i ! ( n − i ) ! ∗ i ! j ! ( i − j ) ! =\sum_{i=j}^{n}{(-1)^{n-i}*\frac{n!}{i!(n-i)!}*\frac{i!}{j!(i-j)!}} =i=jn(1)nii!(ni)!n!j!(ij)!i!

= ∑ i = j n ( − 1 ) n − i ∗ n ! ( n − i ) ! ∗ 1 j ! ( i − j ) ! =\sum_{i=j}^{n}{(-1)^{n-i}*\frac{n!}{(n-i)!}*\frac{1}{j!(i-j)!}} =i=jn(1)ni(ni)!n!j!(ij)!1

= ∑ i = j n ( − 1 ) n − i ∗ n ! ( n − i ) ! ( n − j ) ! ∗ ( n − j ) ! j ! ( i − j ) ! =\sum_{i=j}^{n}{(-1)^{n-i}*\frac{n!}{(n-i)!(n-j)!}*\frac{(n-j)!}{j!(i-j)!}} =i=jn(1)ni(ni)!(nj)!n!j!(ij)!(nj)!

= ∑ i = j n ( − 1 ) n − i ∗ ( n − j ) ! ( n − i ) ! ( i − j ) ! ∗ n ! j ! ( n − j ) ! =\sum_{i=j}^{n}{(-1)^{n-i}*\frac{(n-j)!}{(n-i)!(i-j)!}*\frac{n!}{j!(n-j)!}} =i=jn(1)ni(ni)!(ij)!(nj)!j!(nj)!n!

= ∑ i = j n ( − 1 ) n − i ∗ C n − j i − j ∗ C n j =\sum_{i=j}^{n}{(-1)^{n-i}*C_{n-j}^{i-j}*C_{n}^{j}} =i=jn(1)niCnjijCnj

我们发现当且仅当 j = = n j==n j==n 的时候

= ∑ i = j n ( − 1 ) n − i ∗ C n − j i − j = 1 =\sum_{i=j}^{n}{(-1)^{n-i}*C_{n-j}^{i-j}}=1 =i=jn(1)niCnjij=1

所以原命题得证,二项式反演得证

证明思路

我们在上述证明的倒数第五步推到倒数第四步的时候,也就是分子分母同乘 ( n − j ) ! (n-j)! (nj)!

很多人可能不明白为什么要这么做。

而且最后倒数第二步那个“当且仅当j==n的时候……”这块是怎么来的

现在就来详细讲一下

从二项式定理说起

因为一开始这个式子出现了形如 ∑ i = 0 n C n i \sum_{i=0}^{n}{C_{n}^{i}} i=0nCni这种式子。后来又是在 i ! = n i!=n i!=n的情况下全是0只有相等的时候是1。

那就很容易想到二项式定理的一个常见应用:

( 1 − 1 ) n = 0 = ∑ i = 1 n ( − 1 ) i ∗ C n i (1-1)^n=0=\sum_{i=1}^{n}{(-1)^i*C_{n}^{i}} (11)n=0=i=1n(1)iCni

然后还能注意当 n = 0 n=0 n=0的时候由于 0 0 0^0 00没有意义,左边等号不成立,右边等号=1。

因此最后一步 ∑ i = j n ( − 1 ) n − i ∗ C n − j i − j = = [ j = = n ] \sum_{i=j}^{n}{(-1)^{n-i}*C_{n-j}^{i-j}} == [j==n] i=jn(1)niCnjij==[j==n]

就容易看出来了。

我们令 n ‘ = n − j , i ‘ = i − j n`=n-j,i`=i-j n=nj,i=ij

那么上式变为: ∑ i ‘ = 0 n ‘ ( − 1 ) n ‘ − i ‘ ∗ C n ‘ i ‘ \sum_{i`=0}^{n`}{(-1)^{n`-i`}*C_{n`}^{i`}} i=0n(1)niCni

n ‘ ! = 0 n`!=0 n!=0的时候

= ( 1 − 1 ) n ‘ = 0 =(1-1)^{n`}=0 =(11)n=0

否则就是1,这样就说明了最后一步。

思路往往是反向推导的

现在为什么凑一个 ( n − j ) ! (n-j)! (nj)!就容易开出来了:我们要先想到用二项式定理。

因为有二项式定理转化为零的某次方,然后就想到凑成二项式定理的形式,所以要凑两个组合数出来,还要保证一个和j有关一个无关(可以提出去只剩一个)

所以能想到分子分母同乘这么一个东西

到这里,证明就显得更加明朗。

撰写不易,敬请指正。

谢谢观看!

你可能感兴趣的:(排列组合,二项式反演)