组合数

由于博主数学水平有限,以下的一些证明可能不是很准确,还望读者指出。

定义

n n n 个不同元素中取出 m m m 个组成一个集合(不考虑顺序),产生的不同集合数量就是组合数,记作 C n m C_n^m Cnm

一些性质


  1. 通式: C n m = n ! m ! ( n − m ) ! C_n^m=\frac{n!}{m!(n-m)!} Cnm=m!(nm)!n!

我们从 n n n 个元素中取 m m m 个,那么第 1 1 1 个有 n n n 种选法,第 2 2 2 个有 ( n − 1 ) (n-1) (n1) 种选法,以此类推,第 k ( k ∈ [    1 , m    ] ) k(k\in[\;1,m\;]) k(k[1,m]) 个有 ( n − k + 1 ) (n-k+1) (nk+1) 种选法,故应是 ∏ i = 1 m ( n − i + 1 ) = n ! ( n − m ) ! \prod \limits _{i=1}^m(n-i+1)=\frac{n!}{(n-m)!} i=1m(ni+1)=(nm)!n!

但是由于不考虑顺序,而最后选出的每一种方案都对应着 m ! m! m! 种顺序(因为有 m m m 个),所以还要除以 m ! m! m!,即最后的表达式为 n ! m ! ( n − m ) ! \frac{n!}{m!(n-m)!} m!(nm)!n!


  1. C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnnm

我们每次从 n n n 个元素中取出 m m m 个,那么剩下的 ( n − m ) (n-m) (nm) 个元素也组成一个集合,这两个集合一一对应,所以从 n n n 个中取 m m m 个和取 ( n − m ) (n-m) (nm) 个的方案数是一样的。

其实也可以用通式来说明啦。


  1. C n m = C n − 1 m + C n − 1 m − 1 C_{n}^m=C_{n-1}^m+C_{n-1}^{m-1} Cnm=Cn1m+Cn1m1

考虑是否取第 n n n 个元素。若取第 n n n 个元素,那我们就要从剩下的 ( n − 1 ) (n-1) (n1) 个元素中选出 ( m − 1 ) (m-1) (m1) 个来,即 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1。同理,若不取第 n n n 个元素,那我们就要从剩下的 ( n − 1 ) (n-1) (n1) 个元素中选出 m m m 个来,即 C n − 1 m C_{n-1}^m Cn1m。加起来就是 C n m C_n^m Cnm

这个公式可以让我们在 n 2 n^2 n2 的时间内预处理出组合数(就是杨辉三角)。


  1. ∑ i = 0 n C n i = 2 n \sum\limits_{i=0}^nC_n^i=2^n i=0nCni=2n(即 C n 0 + C n 1 + C n 2 + ⋯ + C n n = 2 n C_n^0+C_n^1+C_n^2+\cdots+C_n^n=2^n Cn0+Cn1+Cn2++Cnn=2n

每个元素都有 2 2 2 种取法(要么取,要么不取),所以总方案数是 2 n 2^n 2n

∑ i = 0 n C n i \sum\limits_{i=0}^nC_n^i i=0nCni 代表的就是总方案数,那就是 2 n 2^n 2n,故原式得证。


  1. ∑ i = m n C i m = C n + 1 m + 1 \sum\limits_{i=m}^{n}C_{i}^m=C_{n+1}^{m+1} i=mnCim=Cn+1m+1(即 C m m + C m + 1 m + ⋯ + C n m = C n + 1 m + 1 C_m^m+C_{m+1}^m+\cdots+C_{n}^m=C_{n+1}^{m+1} Cmm+Cm+1m++Cnm=Cn+1m+1

由于 C m m = C m + 1 m + 1 = 1 C_m^m=C_{m+1}^{m+1}=1 Cmm=Cm+1m+1=1,那前两项就可以化为 C m + 1 m + 1 + C m + 1 m C_{m+1}^{m+1}+C_{m+1}^m Cm+1m+1+Cm+1m

然后通过性质 3 3 3 可知 C m + 1 m + 1 + C m + 1 m = C m + 2 m + 1 C_{m+1}^{m+1}+C_{m+1}^m=C_{m+2}^{m+1} Cm+1m+1+Cm+1m=Cm+2m+1,然后与第 3 3 3 C m + 2 m C_{m+2}^m Cm+2m 合并可得 C m + 3 m + 1 C_{m+3}^{m+1} Cm+3m+1,依此类推。

那最后一一合并下来就是 C n + 1 m + 1 C_{n+1}^{m+1} Cn+1m+1

这个公式的推论 ∑ i = l r C i m = C r + 1 m + 1 − C l m + 1 \sum\limits_{i=l}^rC_{i}^m=C_{r+1}^{m+1}-C_{l}^{m+1} i=lrCim=Cr+1m+1Clm+1

运用前缀和的思想, ∑ i = m l − 1 C i m = C l m + 1 \sum\limits_{i=m}^{l-1}C_{i}^m=C_l^{m+1} i=ml1Cim=Clm+1 ∑ i = m r C i m = C r + 1 m + 1 \sum\limits_{i=m}^rC_{i}^m=C_{r+1}^{m+1} i=mrCim=Cr+1m+1

所以 ∑ i = l r C i m = ∑ i = m r C i m − ∑ i = m l − 1 C i m = C r + 1 m + 1 − C l m + 1 \sum\limits_{i=l}^rC_{i}^m=\sum\limits_{i=m}^rC_{i}^m-\sum\limits_{i=m}^{l-1}C_{i}^m=C_{r+1}^{m+1}-C_{l}^{m+1} i=lrCim=i=mrCimi=ml1Cim=Cr+1m+1Clm+1

那么运用这个公式可以求出 “ “ 一段 ” ” 组合数之和。


  1. 二项式定理: ( a + b ) n = ∑ i = 0 n C n i a i b n − i (a+b)^n=\sum\limits_{i=0}^nC_{n}^ia^ib^{n-i} (a+b)n=i=0nCniaibni

用数学归纳法证明。当 n = 1 n=1 n=1 时, ( a + b ) 1 = C 1 0 a 0 b 1 + C 1 1 a 1 b 0 = a + b (a+b)^1=C_1^0a^0b^1+C_1^1a^1b^0=a+b (a+b)1=C10a0b1+C11a1b0=a+b 成立。

现在假设当 n = m n=m n=m 时该定理成立,那么当 n = m + 1 n=m+1 n=m+1 时:

( a + b ) m + 1 = ( a + b ) ( a + b ) m (a+b)^{m+1}=(a+b)(a+b)^m (a+b)m+1=(a+b)(a+b)m

                                   = ( a + b ) ∑ i = 0 m C m i a i b m − i \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=(a+b)\sum\limits_{i=0}^mC_{m}^ia^ib^{m-i} =(a+b)i=0mCmiaibmi

                                   = ∑ i = 0 m C m i a i + 1 b m − i + ∑ i = 0 m C m i a i b m − i + 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=0}^mC_{m}^ia^{i+1}b^{m-i}+\sum\limits_{i=0}^mC_{m}^ia^{i}b^{m-i+1} =i=0mCmiai+1bmi+i=0mCmiaibmi+1

                                   = ∑ i = 1 m + 1 C m i − 1 a i b m − i + 1 + ∑ i = 0 m C m i a i b m − i + 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=1}^{m+1}C_{m}^{i-1}a^{i}b^{m-i+1}+\sum\limits_{i=0}^mC_{m}^ia^{i}b^{m-i+1} =i=1m+1Cmi1aibmi+1+i=0mCmiaibmi+1

                                   = ∑ i = 0 m + 1 ( C m i − 1 + C m i ) a i b m − i + 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=0}^{m+1}(C_{m}^{i-1}+C_m^i)a^{i}b^{m-i+1} =i=0m+1(Cmi1+Cmi)aibmi+1

                                   = ∑ i = 0 m + 1 C m + 1 i a i b m + 1 − i \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=0}^{m+1}C_{m+1}^ia^{i}b^{m+1-i} =i=0m+1Cm+1iaibm+1i

证毕。


  1. Lucas 定理

p p p 是质数,则对于任意整数 1 ≤ m ≤ n 1\le m\le n 1mn 有(为了方便,用 % \% % 代表取模,用 / / / 代表整除)

C n m ≡ C n % p m % p × C n / p m / p ( m o d    p ) C_n^m\equiv C_{n\%p}^{m\%p}\times C_{n/p}^{m/p}(\mathrm{mod}\;p) CnmCn%pm%p×Cn/pm/p(modp)

这个定理我还不会证,有时间去学一下。

这个公式可以让我们在 log ⁡ \log log 的时间内求出 n , m n,m n,m 较大但 p p p 较小时的组合数。


  1. ∑ i = 0 n ( C n i ) 2 = C 2 n n \sum\limits_{i=0}^n(C_n^i)^2=C_{2n}^n i=0n(Cni)2=C2nn

( 1 + x ) 2 n = ( 1 + x ) n ⋅ ( 1 + x ) n = ( C n 0 + C n 1 x + ⋯ + C n n x n ) ⋅ ( C n 0 + C n 1 x + ⋯ + C n n x n ) = ⋯ + ( C n 0 C n n + C n 1 C n n − 1 + ⋯ + C n k C n n − k + ⋯ + C n n C n 0 ) x n = ⋯ + ( C n 0 C n 0 + C n 1 C n 1 + ⋯ + C n k C n k + ⋯ + C n n C n n ) x n \begin{aligned} (1+x)^{2n} &= (1+x)^n\sdot (1+x)^n \\ &= (C_n^0+C_n^1x+\cdots+C_n^nx^n)\sdot(C_n^0+C_n^1x+\cdots+C_n^nx^n) \\ &= \cdots+(C_n^0C_n^n+C_n^1C_n^{n-1}+\cdots+C_n^kC_n^{n-k}+\cdots+C_n^nC_n^0)x^n\\ &=\cdots+(C_n^0C_n^0+C_n^1C_n^{1}+\cdots+C_n^kC_n^{k}+\cdots+C_n^nC_n^n)x^n\\ \end{aligned} (1+x)2n=(1+x)n(1+x)n=(Cn0+Cn1x++Cnnxn)(Cn0+Cn1x++Cnnxn)=+(Cn0Cnn+Cn1Cnn1++CnkCnnk++CnnCn0)xn=+(Cn0Cn0+Cn1Cn1++CnkCnk++CnnCnn)xn

x n x^n xn 的系数就是我们要求的。又

( 1 + x ) 2 n = ∑ i = 0 2 n C 2 n i x i (1+x)^{2n} = \sum_{i=0}^{2n}C_{2n}^ix^i (1+x)2n=i=02nC2nixi

则可知 x n x^n xn 的系数是 C 2 n n C_{2n}^n C2nn,故成立。

变式:若 n < m n<m n<m,则 ∑ i = 0 n C n i C m i = C n + m n \sum\limits_{i=0}^nC_n^iC_m^i=C_{n+m}^n i=0nCniCmi=Cn+mn,推导过程同理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值