基础组合数学学习笔记

一.组合数的定义.

下降幂:我们把从 n n n个不同的数中选出 m m m个数组成不同序列(考虑顺序)的数量称为 n n n m m m阶下降幂,记为 n m ‾ n^{\underline{m}} nm,即:
n m ‾ = ∏ i = 1 m ( n − i + 1 ) = n ( n − 1 ) ( n − 2 ) ⋯ ( n − m + 1 ) = n ! ( n − m ) ! n^{\underline{m}}=\prod_{i=1}^{m}(n-i+1)=n(n-1)(n-2)\cdots(n-m+1)=\frac{n!}{(n-m)!} nm=i=1m(ni+1)=n(n1)(n2)(nm+1)=(nm)!n!

上升幂:我们把 n n n m m m阶上升幂记为 n m ‾ n^{\overline{m}} nm,与下降幂类似的有:
n m ‾ = ∏ i = 1 m ( n + i − 1 ) = n ( n + 1 ) ( n + 2 ) ⋯ ( n + m − 1 ) = ( n + m − 1 ) m ‾ n^{\overline{m}}=\prod_{i=1}^{m}(n+i-1)=n(n+1)(n+2)\cdots(n+m-1)=(n+m-1)^{\underline{m}} nm=i=1m(n+i1)=n(n+1)(n+2)(n+m1)=(n+m1)m

组合数:我们把从n个不同的数中选出 m m m个数组成不同集合(不考虑顺序)的数量记为 ( n m ) \binom{n}{m} (mn),即:
( n m ) = n m ‾ m ! = ∏ i = 1 m ( n − i + 1 ) ∏ i = 1 m i = n ! m ! ( n − m ) ! \binom{n}{m}=\frac{n^{\underline{m}}}{m!}=\frac{\prod_{i=1}^{m}(n-i+1)}{\prod_{i=1}^{m}i}=\frac{n!}{m!(n-m)!} (mn)=m!nm=i=1mii=1m(ni+1)=m!(nm)!n!

特别的,我们规定 ( n 0 ) = 1 \binom{n}{0}=1 (0n)=1.

观察三个定义,我们发现 n n n都不一定非要是非负整数,于是将 n n n的定义域推广到实数域上.

组合数最经典的求法是直接预处理阶乘,这样就可以在模数是素数时做到 O ( n ) O(n) O(n)预处理而 O ( 1 ) O(1) O(1)回答询问了.

还有一种求法是在模数不为素的时候,直接统计每一个素因子的出现数量,最后直接乘起来就好了,求单个组合数的时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn).


二.隔板法.

隔板法:对于 n n n个顺序排列的相同的球,要在它们之中安置 m m m块相同的隔板,两个球之间最多只能有一块隔板且两边不能有,就可以把这个看成在 n − 1 n-1 n1个空中放入 m m m个球,方案数为 ( n − 1 m ) \binom{n-1}{m} (mn1),这种方法称为隔板法.

隔板法可以很方便的解决一些看起来很难的问题,下面就给几道例题:

问题1:给定一个方程 ∑ i = 1 m x i = n \sum_{i=1}^{m}x_i=n i=1mxi=n,求方程的正整数解数量.

分析:看成在 n n n个球之中插入 m − 1 m-1 m1块隔板,两个球之间不能有多于一块隔板且两边不能有,方案数即为 ( n − 1 m − 1 ) \binom{n-1}{m-1} (m1n1).

问题2:给定一个方程 ∑ i = 1 m x i = n \sum_{i=1}^{m}x_i=n i=1mxi=n,求方程的自然数解数量.

分析:把算式变成:
∑ i = 1 m ( x i + 1 ) = n + m \sum_{i=1}^{m}(x_i+1)=n+m i=1m(xi+1)=n+m

那么现在问题就转化为了问题1,答案就是 ( n + m − 1 m − 1 ) = ( n + m − 1 n ) \binom{n+m-1}{m-1}=\binom{n+m-1}{n} (m1n+m1)=(nn+m1).

问题3:给定 n n n个相同的白球,要求在其中插入 m m m个相同的黑球,使得每两个黑球之间至少有 k k k个白球(保证 n ≥ ( m − 1 ) k n\geq (m-1)k n(m1)k),求方案数.

分析:考虑先提出 ( m − 1 ) k (m-1)k (m1)k个白球,直接在 m m m个黑球组成的空隙分别插入 k k k个白球,问题变为在 n − ( m − 1 ) k n-(m-1)k n(m1)k个白球中插入 m m m个黑球,直接套用问题二的公式可得答案:
( n − ( m − 1 ) k + m m ) = ( n + m + k − m k m ) \binom{n-(m-1)k+m}{m}=\binom{n+m+k-mk}{m} (mn(m1)k+m)=(mn+m+kmk)

问题4:给定一个由 n n n个相同的白球组成的环(旋转同构算同一种方案,翻转同构不算同一种),在环中插入 m m m个相同的黑球,使得每两个黑球之间至少有 k k k个白球(保证 n ≥ m k n\geq mk nmk),求方案数.

分析:先钦定一个黑球在最前面,问题转化为在 n n n个白球中插入 m + 2 m+2 m+2个黑球(两端必须放),直接套用问题4的答案并除掉旋转同构的 m m m得到答案:
1 m ( n − m k + m − 1 m − 1 ) \frac{1}{m}\binom{n-mk+m-1}{m-1} m1(m1nmk+m1)



三.二项式定理.

二项式定理:对于一个非负整数 n n n ( a + b ) n = ∑ i = 0 n ( n i ) a i b n − i (a+b)^n=\sum_{i=0}^{n}\binom{n}{i}a^ib^{n-i} (a+b)n=i=0n(in)aibni.

二项式定理的推论1 ∑ i = 0 n ( n i ) = 2 n \sum_{i=0}^{n}\binom{n}{i}=2^n i=0n(in)=2n.

二项式定理的推论2 ∑ i = 1 n ( − 1 ) k ( n i ) = [ n = 1 ] \sum_{i=1}^{n}(-1)^k\binom{n}{i}=[n=1] i=1n(1)k(in)=[n=1].

这两个式子分别可以用 ( 1 + 1 ) n (1+1)^n (1+1)n ( 1 − 1 ) n (1-1)^n (11)n套上二项式定理得到.

二项式定理的推论3 ∑ i = 0 n [ 2 ∣ n ] ( n i ) a i b n − i = ( a + b ) n + ( a − b ) n 2 \sum_{i=0}^{n}[2|n]\binom{n}{i}a^{i}b^{n-i}=\frac{(a+b)^{n}+(a-b)^{n}}{2} i=0n[2n](in)aibni=2(a+b)n+(ab)n.

广义二项式定理:对于一个实数 n n n ( a + b ) n = ∑ i = 0 + ∞ ( n i ) a i b n − i (a+b)^{n}=\sum_{i=0}^{+\infty}\binom{n}{i}a^{i}b^{n-i} (a+b)n=i=0+(in)aibni.

多项式定理 ( a 1 + a 2 + ⋯ + a m ) n = ∑ i 1 + i 2 + ⋯ + i m = n n ! i 1 ! i 2 ! ⋯ i m ! a 1 i 1 a 2 i 2 ⋯ a m i m (a_1+a_2+\cdots+a_m)^{n}=\sum_{i_1+i_2+\cdots+i_m=n}\frac{n!}{i_1!i_2!\cdots i_m!}a_1^{i_1}a_2^{i_2}\cdots a_m^{i_m} (a1+a2++am)n=i1+i2++im=ni1!i2!im!n!a1i1a2i2amim.


四.组合恒等式.

接下来在这一节出现的组合恒等式中,若没有特殊说明,则默认变量的取值范围能够使得所有的运算有效.

其中对于组合数 ( n m ) \binom{n}{m} (mn)而言,有效的 n n n为实数, m m m为非负整数;对于和式而言,其上下界均为整数,且下界小于等于上界.

组合恒等式1(对称恒等式):对于任意非负整数 n n n,有 ( n m ) = ( n n − m ) \binom{n}{m}=\binom{n}{n-m} (mn)=(nmn).

组合恒等式2(加法/归纳恒等式) ( n m ) = ( n − 1 m ) + ( n − 1 m − 1 ) \binom{n}{m}=\binom{n-1}{m}+\binom{n-1}{m-1} (mn)=(mn1)+(m1n1).

证明:
( n − 1 m ) + ( n − 1 m − 1 ) = ( n − 1 ) m ‾ m ! + ( n − 1 ) m − 1 ‾ ( m − 1 ) ! = ( n − m ) ( n − 1 ) m − 1 ‾ + m ( n − 1 ) m − 1 ‾ m ! = n ( n − 1 ) m − 1 ‾ m ! = n m ‾ m ! = ( n m ) \binom{n-1}{m}+\binom{n-1}{m-1}\\ =\frac{(n-1)^{\underline{m}}}{m!}+\frac{(n-1)^{\underline{m-1}}}{(m-1)!}\\ =\frac{(n-m)(n-1)^{\underline{m-1}}+m(n-1)^{\underline{m-1}}}{m!}\\ =\frac{n(n-1)^{\underline{m-1}}}{m!}\\ =\frac{n^{\underline{m}}}{m!} =\binom{n}{m} (mn1)+(m1n1)=m!(n1)m+(m1)!(n1)m1=m!(nm)(n1)m1+m(n1)m1=m!n(n1)m1=m!nm=(mn)

证毕.

利用这个组合恒等式可以做到 O ( n 2 ) O(n^{2}) O(n2)预处理所有 i , j ≤ n i,j\leq n i,jn的组合数 ( i j ) \binom{i}{j} (ji).

组合恒等式2的推论1(平行求和法) ∑ i = 0 n ( m + i i ) = ( m + n + 1 n ) \sum_{i=0}^{n}\binom{m+i}{i}=\binom{m+n+1}{n} i=0n(im+i)=(nm+n+1).

证明:
∑ i = 0 n ( m + i i ) = ( m 0 ) + ∑ i = 1 n ( ( m + i + 1 i ) − ( m + i i − 1 ) ) = ( m 0 ) + ( m + n + 1 n ) − ( m + 1 0 ) = 1 + ( m + n + 1 n ) − 1 = ( m + n + 1 n ) \sum_{i=0}^{n}\binom{m+i}{i}\\ =\binom{m}{0}+\sum_{i=1}^{n}\left(\binom{m+i+1}{i}-\binom{m+i}{i-1}\right)\\ =\binom{m}{0}+\binom{m+n+1}{n}-\binom{m+1}{0}\\ =1+\binom{m+n+1}{n}-1\\ =\binom{m+n+1}{n} i=0n(im+i)=(0m)+i=1n((im+i+1)(i1m+i))=(0m)+(nm+n+1)(0m+1)=1+(nm+n+1)1=(nm+n+1)

证毕.

组合恒等式2的推论2(上指标求和法) ∑ i = 0 n ( i m ) = ( n + 1 m + 1 ) \sum_{i=0}^{n}\binom{i}{m}=\binom{n+1}{m+1} i=0n(mi)=(m+1n+1).

证明:
∑ i = 0 n ( i m ) = ∑ i = 0 n ( ( i + 1 m + 1 ) − ( i m + 1 ) ) = ( n + 1 m + 1 ) − ( 0 m + 1 ) = ( n + 1 m + 1 ) \sum_{i=0}^{n}\binom{i}{m}\\ =\sum_{i=0}^{n}\left(\binom{i+1}{m+1}-\binom{i}{m+1}\right)\\ =\binom{n+1}{m+1}-\binom{0}{m+1}\\ =\binom{n+1}{m+1} i=0n(mi)=i=0n((m+1i+1)(m+1i))=(m+1n+1)(m+10)=(m+1n+1)

证毕.

组合恒等式3(吸收/提取恒等式) m ( n m ) = n ( n − 1 m − 1 ) m\binom{n}{m}=n\binom{n-1}{m-1} m(mn)=n(m1n1).

证明:
m ( n m ) = m n m ‾ m ! = n ( n − 1 ) m − 1 ‾ ( m − 1 ) ! = n ( n − 1 m − 1 ) m\binom{n}{m} =m\frac{n^{\underline{m}}}{m!} =n\frac{(n-1)^{\underline{m-1}}}{(m-1)!} =n\binom{n-1}{m-1} m(mn)=mm!nm=n(m1)!(n1)m1=n(m1n1)

证毕.

利用这个组合恒等式可以做到 O ( m ) O(m) O(m)求出单个组合数 ( n m ) \binom{n}{m} (mn).

组合恒等式4 m ( n m ) = ( n − m + 1 ) ( n m − 1 ) m\binom{n}{m}=(n-m+1)\binom{n}{m-1} m(mn)=(nm+1)(m1n).

证明:
m ( n m ) = m n m ‾ m ! = ( n − m + 1 ) n m − 1 ‾ ( m − 1 ) ! = ( n − m + 1 ) ( n m − 1 ) m\binom{n}{m} =m\frac{n^{\underline{m}}}{m!} =(n-m+1)\frac{n^{\underline{m-1}}}{(m-1)!} =(n-m+1)\binom{n}{m-1} m(mn)=mm!nm=(nm+1)(m1)!nm1=(nm+1)(m1n)

证毕.

利用这个组合恒等式可以做到 O ( n ) O(n) O(n)预处理一行组合数.即对于所有 i ≤ n i\leq n in,预处理 ( m i ) \binom{m}{i} (im).

组合恒等式5 ( n − m ) ( n m ) = n ( n − 1 m ) (n-m)\binom{n}{m}=n\binom{n-1}{m} (nm)(mn)=n(mn1).

证明:
( n − m ) ( n m ) = ( n − m ) n m ‾ m ! = n ( n − 1 ) m ‾ m ! = n ( n − 1 m ) (n-m)\binom{n}{m} =(n-m)\frac{n^{\underline{m}}}{m!} =n\frac{(n-1)^{\underline{m}}}{m!} =n\binom{n-1}{m} (nm)(mn)=(nm)m!nm=nm!(n1)m=n(mn1)

证毕.

利用这个组合恒等式可以做到 O ( n ) O(n) O(n)预处理一列组合数.即对于所有 i ≤ n i\leq n in,预处理 ( i m ) \binom{i}{m} (mi).

组合恒等式6(上指标反转) ( n m ) = ( − 1 ) m ( m − n − 1 m ) \binom{n}{m}=(-1)^{m}\binom{m-n-1}{m} (mn)=(1)m(mmn1).

证明:
( − 1 ) m ( m − n − 1 m ) = ( − 1 ) m ( m − n − 1 ) m ‾ m ! = ( − 1 ) m m ! ∏ i = 1 m ( m − n − i ) = 1 m ! ∏ i = 1 m ( n − m + i ) = n m ‾ m ! = ( n m ) (-1)^{m}\binom{m-n-1}{m}\\ =(-1)^{m}\frac{(m-n-1)^{\underline{m}}}{m!}\\ =\frac{(-1)^{m}}{m!}\prod_{i=1}^{m}(m-n-i)\\ =\frac{1}{m!}\prod_{i=1}^{m}(n-m+i)\\ =\frac{n^{\underline{m}}}{m!}\\ =\binom{n}{m} (1)m(mmn1)=(1)mm!(mn1)m=m!(1)mi=1m(mni)=m!1i=1m(nm+i)=m!nm=(mn)

证毕.

组合恒等式7(三项式版恒等式) ( n m ) ( m k ) = ( n k ) ( n − k m − k ) \binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k} (mn)(km)=(kn)(mknk).

证明:
( n m ) ( m k ) = n m ‾ m ! m k ‾ k ! = n k ‾ ( n − k ) m − k ‾ k ! m k ‾ m ! = ( n k ) ( n − k ) m − k ‾ ( m − k ) ! = ( n k ) ( n − k m − k ) \binom{n}{m}\binom{m}{k} =\frac{n^{\underline{m}}}{m!}\frac{m^{\underline{k}}}{k!} =\frac{n^{\underline{k}}(n-k)^{\underline{m-k}}}{k!}\frac{m^{\underline{k}}}{m!} =\binom{n}{k}\frac{(n-k)^{\underline{m-k}}}{(m-k)!} =\binom{n}{k}\binom{n-k}{m-k} (mn)(km)=m!nmk!mk=k!nk(nk)mkm!mk=(kn)(mk)!(nk)mk=(kn)(mknk)

证毕.

组合恒等式7的推论:对于整数 0 ≤ m ≤ n 0\leq m\leq n 0mn ∑ i = 0 m ( m i ) ( n i ) = n + 1 n − m + 1 \sum_{i=0}^{m}\frac{\binom{m}{i}}{\binom{n}{i}}=\frac{n+1}{n-m+1} i=0m(in)(im)=nm+1n+1.

证明:

将组合恒等式7两边同除 ( n m ) ( n k ) \binom{n}{m}\binom{n}{k} (mn)(kn),我们可以得到:
( m k ) ( n k ) = ( n − k m − k ) ( n m ) \frac{\binom{m}{k}}{\binom{n}{k}}=\frac{\binom{n-k}{m-k}}{\binom{n}{m}} (kn)(km)=(mn)(mknk)

利用这个式子进行推导:
∑ i = 0 m ( m i ) ( n i ) = ∑ i = 0 m ( n − i m − i ) ( n m ) = 1 ( n m ) ∑ i = 0 m ( n − m + i i ) = ( n + 1 m ) ( n m ) = n + 1 n − m + 1 \sum_{i=0}^{m}\frac{\binom{m}{i}}{\binom{n}{i}}\\ =\sum_{i=0}^{m}\frac{\binom{n-i}{m-i}}{\binom{n}{m}}\\ =\frac{1}{\binom{n}{m}}\sum_{i=0}^{m}\binom{n-m+i}{i}\\ =\frac{\binom{n+1}{m}}{\binom{n}{m}}\\ =\frac{n+1}{n-m+1} i=0m(in)(im)=i=0m(mn)(mini)=(mn)1i=0m(inm+i)=(mn)(mn+1)=nm+1n+1

证毕.

这个组合恒等式利用组合意义非常容易解释,因为两边都可以解释为把集合分成 ( n − m ) + ( m − k ) + k (n-m)+(m-k)+k (nm)+(mk)+k三份.

证毕.

组合恒等式8(范德蒙卷积恒等式) ∑ i = 0 k ( n i ) ( m k − i ) = ( n + m k ) \sum_{i=0}^{k}\binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k} i=0k(in)(kim)=(kn+m).

证明:

考虑 ( n i ) \binom{n}{i} (in)是二项式 ( 1 + x ) n (1+x)^{n} (1+x)n展开后 x i x^{i} xi的系数,那么我们有:
( 1 + x ) n ( 1 + x ) m = ( 1 + x ) n + m ( ∑ i = 0 + ∞ ( n i ) x i ) ( ∑ i = 0 + ∞ ( m i ) x i ) = ∑ i = 0 + ∞ ( n + m i ) x i (1+x)^{n}(1+x)^{m}=(1+x)^{n+m}\\ \left(\sum_{i=0}^{+\infty}\binom{n}{i}x^{i}\right)\left(\sum_{i=0}^{+\infty}\binom{m}{i}x^{i}\right)=\sum_{i=0}^{+\infty}\binom{n+m}{i}x^{i} (1+x)n(1+x)m=(1+x)n+m(i=0+(in)xi)(i=0+(im)xi)=i=0+(in+m)xi

然后我们写出右边式子中 k k k次项是怎么得出的:
( n + m k ) x k = ∑ i = 0 k ( n i ) x i ( m k − i ) x k − i \binom{n+m}{k}x^{k}=\sum_{i=0}^{k}\binom{n}{i}x^{i}\binom{m}{k-i}x^{k-i} (kn+m)xk=i=0k(in)xi(kim)xki

两边同时消除 x k x^{k} xk就可以得到:
( n + m k ) = ∑ i = 0 k ( n i ) ( m k − i ) \binom{n+m}{k}=\sum_{i=0}^{k}\binom{n}{i}\binom{m}{k-i} (kn+m)=i=0k(in)(kim)

证毕.

组合恒等式8的推论1 ∑ i = 0 m − k ( n i ) ( m k + i ) = ( n + m m − k ) \sum_{i=0}^{m-k}\binom{n}{i}\binom{m}{k+i}=\binom{n+m}{m-k} i=0mk(in)(k+im)=(mkn+m).

证明:
∑ i = 0 m − k ( n i ) ( m k + i ) = ∑ i = 0 m − k ( n i ) ( m m − k − i ) = ( n + m m − k ) \sum_{i=0}^{m-k}\binom{n}{i}\binom{m}{k+i}\\ =\sum_{i=0}^{m-k}\binom{n}{i}\binom{m}{m-k-i}\\ =\binom{n+m}{m-k} i=0mk(in)(k+im)=i=0mk(in)(mkim)=(mkn+m)

证毕.

组合恒等式8的推论2(上指标卷积恒等式) ∑ i = 0 k ( i n ) ( k − i m ) = ( k + 1 m + n + 1 ) \sum_{i=0}^{k}\binom{i}{n}\binom{k-i}{m}=\binom{k+1}{m+n+1} i=0k(ni)(mki)=(m+n+1k+1).

证明:
∑ i = 0 k ( i n ) ( k − i m ) = ∑ i = 0 k ∑ j = 0 i − 1 ( j n − 1 ) ( k − i m ) = ∑ i = 0 k ( i n − 1 ) ∑ j = i + 1 k ( k − j m ) = ∑ i = 0 k ( i n − 1 ) ∑ j = 0 k − i − 1 ( j m ) = ∑ i = 0 k ( i n − 1 ) ( k − i m + 1 ) ⋮ = ∑ i = 0 k ( i 0 ) ( k − i m + n ) = ∑ i = 0 k ( i m + n ) = ( k + 1 m + n + 1 ) \sum_{i=0}^{k}\binom{i}{n}\binom{k-i}{m}\\ =\sum_{i=0}^{k}\sum_{j=0}^{i-1}\binom{j}{n-1}\binom{k-i}{m}\\ =\sum_{i=0}^{k}\binom{i}{n-1}\sum_{j=i+1}^{k}\binom{k-j}{m}\\ =\sum_{i=0}^{k}\binom{i}{n-1}\sum_{j=0}^{k-i-1}\binom{j}{m}\\ =\sum_{i=0}^{k}\binom{i}{n-1}\binom{k-i}{m+1}\\ \vdots\\ =\sum_{i=0}^{k}\binom{i}{0}\binom{k-i}{m+n}\\ =\sum_{i=0}^{k}\binom{i}{m+n}\\ =\binom{k+1}{m+n+1} i=0k(ni)(mki)=i=0kj=0i1(n1j)(mki)=i=0k(n1i)j=i+1k(mkj)=i=0k(n1i)j=0ki1(mj)=i=0k(n1i)(m+1ki)=i=0k(0i)(m+nki)=i=0k(m+ni)=(m+n+1k+1)

证毕.

组合恒等式9的推论3(下降幂二项式定理) ∑ i = 0 n ( n i ) x i ‾ y n − i ‾ = ( x + y ) n ‾ \sum_{i=0}^{n}\binom{n}{i}x^{\underline{i}}y^{\underline{n-i}}=(x+y)^{\underline{n}} i=0n(in)xiyni=(x+y)n.

证明:
∑ i = 0 n ( n i ) x i ‾ y n − i ‾ = ∑ i = 0 n n ! i ! ( n − i ) ! x i ‾ y n − i ‾ = n ! ∑ i = 0 n ( x i ) ( y n − i ) = n ! ( x + y n ) = ( x + y ) n ‾ \sum_{i=0}^{n}\binom{n}{i}x^{\underline{i}}y^{\underline{n-i}}\\ =\sum_{i=0}^{n}\frac{n!}{i!(n-i)!}x^{\underline{i}}y^{\underline{n-i}}\\ =n!\sum_{i=0}^{n}\binom{x}{i}\binom{y}{n-i}\\ =n!\binom{x+y}{n}\\ =(x+y)^{\underline{n}} i=0n(in)xiyni=i=0ni!(ni)!n!xiyni=n!i=0n(ix)(niy)=n!(nx+y)=(x+y)n

证毕.


五.上指标含有1/2的组合数.

一类上指标中含有 1 2 \frac{1}{2} 21的组合数往往有各种技巧处理.

定理5.1:对于一个正整数 n n n,有 ( 1 2 n ) = ( − 1 ) n − 1 2 1 − 2 n ( 2 n − 2 ) ! n ! ( n − 1 ) ! \binom{\frac{1}{2}}{n}=(-1)^{n-1}2^{1-2n}\frac{(2n-2)!}{n!(n-1)!} (n21)=(1)n1212nn!(n1)!(2n2)!.

证明:
( 1 2 n ) = ( 1 2 ) n ‾ n ! = 1 n ! ∏ i = 1 n ( 3 2 − i ) = ( − 1 ) n − 1 n ! 2 − n ∏ i = 1 n − 1 ( 2 i − 1 ) = ( − 1 ) n − 1 n ! 2 − n ∏ i = 1 2 n − 2 i ∏ i = 1 n − 1 2 i = ( − 1 ) n − 1 2 1 − 2 n ( 2 n − 2 ) ! n ! ( n − 1 ) ! \binom{\frac{1}{2}}{n}\\ =\frac{\left(\frac{1}{2}\right)^{\underline{n}}}{n!}\\ =\frac{1}{n!}\prod_{i=1}^{n}\left(\frac{3}{2}-i\right)\\ =\frac{(-1)^{n-1}}{n!}2^{-n}\prod_{i=1}^{n-1}(2i-1)\\ =\frac{(-1)^{n-1}}{n!}2^{-n}\frac{\prod_{i=1}^{2n-2}i}{\prod_{i=1}^{n-1}2i}\\ =(-1)^{n-1}2^{1-2n}\frac{(2n-2)!}{n!(n-1)!} (n21)=n!(21)n=n!1i=1n(23i)=n!(1)n12ni=1n1(2i1)=n!(1)n12ni=1n12ii=12n2i=(1)n1212nn!(n1)!(2n2)!

证毕.

定理5.2 n m ‾ ( n − 1 2 ) m ‾ = ( 2 n ) 2 m ‾ 2 2 m n^{\underline{m}}\left(n-\frac{1}{2}\right)^{\underline{m}}=\frac{(2n)^{\underline{2m}}}{2^{2m}} nm(n21)m=22m(2n)2m.

证明:
n m ‾ ( n − 1 2 ) m ‾ = ∏ i = 0 2 m − 1 ( n − i 2 ) = 2 − 2 m ∏ i = 0 2 m − 1 ( 2 n − i ) = ( 2 n ) 2 m ‾ 2 2 m n^{\underline{m}}\left(n-\frac{1}{2}\right)^{\underline{m}}\\ =\prod_{i=0}^{2m-1}\left(n-\frac{i}{2}\right)\\ =2^{-2m}\prod_{i=0}^{2m-1}(2n-i)\\ =\frac{(2n)^{\underline{2m}}}{2^{2m}} nm(n21)m=i=02m1(n2i)=22mi=02m1(2ni)=22m(2n)2m

证毕.

定理5.2的推论 ( n m ) ( n − 1 2 m ) = ( 2 n 2 m ) ( 2 m m ) 2 − 2 m \binom{n}{m}\binom{n-\frac{1}{2}}{m}=\binom{2n}{2m}\binom{2m}{m}2^{-2m} (mn)(mn21)=(2m2n)(m2m)22m.

证明:

在定理5.2的基础上两边同除 ( m ! ) 2 (m!)^{2} (m!)2得到:
( n m ) ( n − 1 2 m ) = ( 2 n ) 2 m ‾ ( m ! ) 2 2 − 2 m = ( 2 n ) 2 m ‾ ( 2 m ) ! ( 2 m ) ! m ! m ! 2 − 2 m = ( 2 n 2 m ) ( 2 m m ) 2 − 2 m \binom{n}{m}\binom{n-\frac{1}{2}}{m}\\ =\frac{(2n)^{\underline{2m}}}{(m!)^2}2^{-2m}\\ =\frac{(2n)^{\underline{2m}}}{(2m)!}\frac{(2m)!}{m!m!}2^{-2m}\\ =\binom{2n}{2m}\binom{2m}{m}2^{-2m} (mn)(mn21)=(m!)2(2n)2m22m=(2m)!(2n)2mm!m!(2m)!22m=(2m2n)(m2m)22m

证毕.


六.高阶差分.

我们定义差分 Δ k f ( x ) = Δ k − 1 f ( x + 1 ) − Δ k − 1 f ( x ) \Delta^{k}f(x)=\Delta^{k-1}f(x+1)-\Delta^{k-1}f(x) Δkf(x)=Δk1f(x+1)Δk1f(x),其中初始定义 Δ 0 f ( x ) = f ( x ) \Delta^{0}f(x)=f(x) Δ0f(x)=f(x).

分别写出 k = 1 , 2 , 3 , 4 k=1,2,3,4 k=1,2,3,4的式子:
Δ 1 ( x ) = f ( x + 1 ) − f ( x ) Δ 2 ( x ) = f ( x + 2 ) − 2 f ( x + 1 ) + f ( x ) Δ 3 ( x ) = f ( x + 3 ) − 3 f ( x + 2 ) + 3 f ( x + 1 ) − f ( x ) Δ 4 ( x ) = f ( x + 4 ) − 4 f ( x + 3 ) + 6 f ( x + 2 ) − 4 f ( x + 1 ) + f ( x ) \Delta^{1}(x)=f(x+1)-f(x)\\ \Delta^{2}(x)=f(x+2)-2f(x+1)+f(x)\\ \Delta^{3}(x)=f(x+3)-3f(x+2)+3f(x+1)-f(x)\\ \Delta^{4}(x)=f(x+4)-4f(x+3)+6f(x+2)-4f(x+1)+f(x) Δ1(x)=f(x+1)f(x)Δ2(x)=f(x+2)2f(x+1)+f(x)Δ3(x)=f(x+3)3f(x+2)+3f(x+1)f(x)Δ4(x)=f(x+4)4f(x+3)+6f(x+2)4f(x+1)+f(x)

我们发现高阶差分展开式的形式为:
Δ k ( x ) = ∑ i = 0 k ( − 1 ) k − i ( k i ) f ( x + i ) \Delta^{k}(x)=\sum_{i=0}^{k}(-1)^{k-i}\binom{k}{i}f(x+i) Δk(x)=i=0k(1)ki(ik)f(x+i)

归纳证明后我们发现这个式子是对的.


七.牛顿级数.

在高等数学中,我们知道一个函数 f ( x ) f(x) f(x)有它的泰勒级数:
f ( x + a ) = ∑ i = 0 + ∞ f ′ ( a ) i ! x i f(x+a)=\sum_{i=0}^{+\infty}\frac{f'(a)}{i!}x^{i} f(x+a)=i=0+i!f(a)xi

而在组合数学中,一个函数 f ( x ) f(x) f(x)也有其对应的牛顿级数:
f ( x + a ) = ∑ i = 0 + ∞ Δ i f ( a ) i ! x i ‾ f(x+a)=\sum_{i=0}^{+\infty}\frac{\Delta^{i}f(a)}{i!}x^{\underline{i}} f(x+a)=i=0+i!Δif(a)xi

我们发现 x i ‾ i ! = ( x i ) \frac{x^{\underline{i}}}{i!}=\binom{x}{i} i!xi=(ix),所以牛顿级数还可以写成:
f ( x + a ) = ∑ i = 0 + ∞ Δ i f ( a ) ( x i ) f(x+a)=\sum_{i=0}^{+\infty}\Delta^{i}f(a)\binom{x}{i} f(x+a)=i=0+Δif(a)(ix)

而我们又发现若 f ( x ) f(x) f(x)是一个 n n n次多项式,那么其高于 n n n阶的差分结果为 0 0 0.所以对于任意一个多项式 f ( x ) = ∑ i = 0 n a i x i f(x)=\sum_{i=0}^{n}a_ix^{i} f(x)=i=0naixi,我们都可以找到对应的系数 b i b_i bi c i c_i ci满足:
f ( x ) = ∑ i = 0 n a i x i = ∑ i = 0 n b i x i ‾ = ∑ i = 0 n c i ( x i ) f(x)=\sum_{i=0}^{n}a_ix^{i}=\sum_{i=0}^{n}b_ix^{\underline{i}}=\sum_{i=0}^{n}c_i\binom{x}{i} f(x)=i=0naixi=i=0nbixi=i=0nci(ix)



八.二项式反演.

二项式反演
f n = ∑ i = 0 n ( − 1 ) i ( n i ) g i ⇔ g n = ∑ i = 0 n ( − 1 ) i ( n i ) f i f_n=\sum_{i=0}^{n}(-1)^{i}\binom{n}{i}g_i\Leftrightarrow g_n=\sum_{i=0}^{n}(-1)^{i}\binom{n}{i}f_i fn=i=0n(1)i(in)gign=i=0n(1)i(in)fi

证明:

将右边的式子代入左边,则这个证明二项式反演等价于证明:
f n = ∑ i = 0 n ( − 1 ) i ( n i ) ∑ j = 0 i ( − 1 ) j ( i j ) f j f_n=\sum_{i=0}^{n}(-1)^{i}\binom{n}{i}\sum_{j=0}^{i}(-1)^{j}\binom{i}{j}f_j fn=i=0n(1)i(in)j=0i(1)j(ji)fj

尝试推导:
∑ i = 0 n ( − 1 ) i ( n i ) ∑ j = 0 i ( − 1 ) j ( i j ) f j = ∑ i = 0 n ( − 1 ) i f i ∑ j = i n ( − 1 ) j ( n j ) ( j i ) = ∑ i = 0 n ( − 1 ) i f i ∑ j = i n ( − 1 ) j ( n i ) ( n − i j − i ) = ∑ i = 0 n ( − 1 ) i ( n i ) f i ∑ j = 0 n − i ( − 1 ) j + i ( n − i j ) = ∑ i = 0 n ( n i ) f i ∑ j = 0 n − i ( − 1 ) j ( n − i j ) = ∑ i = 0 n ( n i ) f i ( 1 − 1 ) n − i = f n \sum_{i=0}^{n}(-1)^{i}\binom{n}{i}\sum_{j=0}^{i}(-1)^{j}\binom{i}{j}f_j\\ =\sum_{i=0}^{n}(-1)^{i}f_i\sum_{j=i}^{n}(-1)^{j}\binom{n}{j}\binom{j}{i}\\ =\sum_{i=0}^{n}(-1)^{i}f_i\sum_{j=i}^{n}(-1)^{j}\binom{n}{i}\binom{n-i}{j-i}\\ =\sum_{i=0}^{n}(-1)^{i}\binom{n}{i}f_i\sum_{j=0}^{n-i}(-1)^{j+i}\binom{n-i}{j}\\ =\sum_{i=0}^{n}\binom{n}{i}f_i\sum_{j=0}^{n-i}(-1)^{j}\binom{n-i}{j}\\ =\sum_{i=0}^{n}\binom{n}{i}f_i(1-1)^{n-i}\\ =f_n i=0n(1)i(in)j=0i(1)j(ji)fj=i=0n(1)ifij=in(1)j(jn)(ij)=i=0n(1)ifij=in(1)j(in)(jini)=i=0n(1)i(in)fij=0ni(1)j+i(jni)=i=0n(in)fij=0ni(1)j(jni)=i=0n(in)fi(11)ni=fn

证毕.

二项式反演有一个更加常用的等价形式:
f n = ∑ i = 0 n ( n i ) g i ⇔ g n = ∑ i = 0 n ( − 1 ) n − i ( n i ) f i f_n=\sum_{i=0}^{n}\binom{n}{i}g_i\Leftrightarrow g_n=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f_i fn=i=0n(in)gign=i=0n(1)ni(in)fi

二项式反演的一个重要应用是计算错排数 d n d_n dn的通项公式.

首先我们有:
n ! = ∑ i = 0 n ( n i ) d i n!=\sum_{i=0}^{n}\binom{n}{i}d_{i} n!=i=0n(in)di

二项式反演后得到:
d n = ∑ i = 0 n ( − 1 ) n − i ( n i ) i ! = ∑ i = 0 n ( − 1 ) i ( n i ) ( n − i ) ! = ∑ i = 0 n ( − 1 ) i n ! i ! ( n − i ) ! ( n − i ) ! = n ! ∑ i = 0 n ( − 1 ) i i ! d_{n}=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}i!\\ =\sum_{i=0}^{n}(-1)^{i}\binom{n}{i}(n-i)!\\ =\sum_{i=0}^{n}(-1)^{i}\frac{n!}{i!(n-i)!}(n-i)!\\ =n!\sum_{i=0}^{n}\frac{(-1)^{i}}{i!} dn=i=0n(1)ni(in)i!=i=0n(1)i(in)(ni)!=i=0n(1)ii!(ni)!n!(ni)!=n!i=0ni!(1)i

我们得到了重要的错排公式
d n = n ! ∑ i = 0 n ( − 1 ) i i ! d_{n}=n!\sum_{i=0}^{n}\frac{(-1)^{i}}{i!} dn=n!i=0ni!(1)i



九.恰好和至多至少的转化.

这是一种很常见的套路,通常情况下需要求出恰好的答案,但恰好非常难求而至多或至少却好做很多,这时候就需要用至多或至少来求恰好了.

一种用二项式反演的情况是,设 f i f_i fi表示至多选 i i i个的方案数, g i g_i gi表示恰好选 i i i个的方案数, f i f_i fi g i g_i gi之间表现出如下关系:
f i = ∑ j = 0 i ( i j ) g j f_i=\sum_{j=0}^{i}\binom{i}{j}g_j fi=j=0i(ji)gj

我们发现这个式子可以直接二项式反演成:
g i = ∑ j = 0 i ( − 1 ) i − j ( i j ) f j g_i=\sum_{j=0}^{i}(-1)^{i-j}\binom{i}{j}f_{j} gi=j=0i(1)ij(ji)fj

同样的,设 f i f_i fi表示至少选 i i i个的方案数, g i g_i gi表示恰好选 i i i个的方案数, f i f_i fi g i g_i gi之间表现出如下关系:
f i = ∑ j = i n ( j i ) g j f_i=\sum_{j=i}^{n}\binom{j}{i}g_j\\ fi=j=in(ij)gj

根据二项式反演同样可以得出:
g i = ∑ j = i n ( − 1 ) j − i ( j i ) f j g_i=\sum_{j=i}^{n}(-1)^{j-i}\binom{j}{i}f_j gi=j=in(1)ji(ij)fj



十.二项式反演的生成函数形式.

观察二项式反演的式子:
f i = ∑ j = 0 i ( i j ) g j ⇔ g i = ∑ j = 0 i ( − 1 ) i − j ( i j ) f j f_i=\sum_{j=0}^{i}\binom{i}{j}g_j\Leftrightarrow g_i=\sum_{j=0}^{i}(-1)^{i-j}\binom{i}{j}f_j fi=j=0i(ji)gjgi=j=0i(1)ij(ji)fj

F ( x ) , G ( x ) F(x),G(x) F(x),G(x)分别为 f i , g i f_i,g_i fi,gi的指数型生成函数,我们发现:
F ( x ) = G ( x ) e x ⇔ G ( x ) = F ( x ) e − x F(x)=G(x)e^{x}\Leftrightarrow G(x)=F(x)e^{-x} F(x)=G(x)exG(x)=F(x)ex

所以就可以直接用NTT快速计算二项式反演啦!

你可能感兴趣的:(算法入门)