大家好,又见面了,我是你们的朋友全栈君。
从m个物品里选出n个的方案数,记作 Cnm C m n C_m^n,即为组合数 组合数有很多很多的性质和定理。。。 注意由于本人沉迷玩梗无法自拔,如果看见您看不懂的梗请随意跳过。
组合数通项公式
Cnm=m!n!∗(m−n)! C m n = m ! n ! ∗ ( m − n ) !
C_m^n=frac{m!}{n!*(m-n)!} 证明:现在我们从m个不同的数里选出n个数组成一个排列,第一个位子上的数有m种取法,第二个位子上的有m-1种,第三个位子上有m-2种。。。共有 m!(m−n)! m ! ( m − n ) ! frac{m!}{(m-n)!}种 然而,我们对于顺序没有要求,假设取出了n个数,第一个位子上有n种放法,第二个位子上有n-1种。。。所以我们刚才得到的哪个东西还要除一个 n! n ! n!
组合数递推公式
Cnm=Cnm−1 Cn−1m−1 C m n = C m − 1 n C m − 1 n − 1
C_m^n=C_{m-1}^n C_{m-1}^{n-1} 证明:从m个不同的数中取n个,第m个数如果取的话有 Cn−1m−1 C m − 1 n − 1 C_{m-1}^{n-1}种取法,如果不取则有 Cnm−1 C m − 1 n C_{m-1}^n种。 如果您是组合数新手,请牢记以上两个公式
性质1
Cnm=Cm−nm C m n = C m m − n
C_m^n=C_m^{m-n} 证明:显然从m个物品里选n个和从m个物品里选m-n个丢掉的方案数是一样的。
性质2
Crm r 1=∑i=0rCim i C m r 1 r = ∑ i = 0 r C m i i
C_{m r 1}^r=sum_{i=0}^r C_{m i}^i 证明:用组合数的递推公式。 首先 C0m=C0m 1=1 C m 0 = C m 1 0 = 1 C_m^0=C_{m 1}^0=1 C0m C1m 1 C2m 2 ... Crm r C m 0 C m 1 1 C m 2 2 . . . C m r r C_m^0 C_{m 1}^1 C_{m 2}^2 ... C_{m r}^r= C1m C1m 1 C2m 2 ... Crm r C m 1 C m 1 1 C m 2 2 . . . C m r r C_m^1 C_{m 1}^1 C_{m 2}^2 ... C_{m r}^r= C1m 2 C2m 2 ... Crm r C m 2 1 C m 2 2 . . . C m r r C_{m 2}^1 C_{m 2}^2 ... C_{m r}^r= Crm r 1 C m r 1 r C_{m r 1}^r
性质3
Cnm∗Crn=Crm∗Cn−rm−r C m n ∗ C n r = C m r ∗ C m − r n − r
C_m^n*C_n^r=C_m^r*C_{m-r}^{n-r} 证明:用组合数的通项公式 Cnm∗Crn= C m n ∗ C n r = C_m^n*C_n^r= m!n!(m−n)!∗n!r!(n−r)!= m ! n ! ( m − n ) ! ∗ n ! r ! ( n − r ) ! = frac{m!}{n!(m-n)!}*frac{n!}{r!(n-r)!}= m!r!(m−r)!∗(m−r)!(m−n)!(n−r)!= m ! r ! ( m − r ) ! ∗ ( m − r ) ! ( m − n ) ! ( n − r ) ! = frac{m!}{r!(m-r)!}*frac{(m-r)!}{(m-n)!(n-r)!}= Crm∗Cn−rm−r C m r ∗ C m − r n − r C_m^r*C_{m-r}^{n-r}
性质4(二项式定理)
∑i=0mCim=2m ∑ i = 0 m C m i = 2 m
sum_{i=0}^m C_m^i=2^m 证明:显然 Cim C m i C_m^i代表一个m位二进制数有i个0的情况下的数量,那么这个和就是m位二进制数的数量了。 推广一下这个二项式定理:
∑i=0mCim∗xi=(x 1)m ∑ i = 0 m C m i ∗ x i = ( x 1 ) m
sum_{i=0}^m C_m^i*x^i=(x 1)^m 这个又怎么证明呢?先把 (x 1)m ( x 1 ) m (x 1)^m写成 (x 1)(x 1)(x 1)... ( x 1 ) ( x 1 ) ( x 1 ) . . . (x 1)(x 1)(x 1)...的格式,然后每一项很精妙啊,比如说i次方项,选的 i i i个 x
x
x是从哪个括号里来呢?有 Cim C m i C_m^i种方案吧,所以 xi x i x^i项的系数是 Cim C m i C_m^i。 这就是杨辉三角的应用(可以自行百度)
性质5
C0m−C1m C2m−...±Cmm=0 C m 0 − C m 1 C m 2 − . . . ± C m m = 0
C_m^0-C_m^1 C_m^2-...±C_m^m=0 证明:假如m是奇数的花,由性质1可知正确。 假如m是偶数的花,这个里面的花,用一下递推公式,然后显然 C0m−1=C0m=1 C m − 1 0 = C m 0 = 1 C_{m-1}^0=C_m^0=1并且 Cm−1m−1=Cmm=1 C m − 1 m − 1 = C m m = 1 C_{m-1}^{m-1}=C_m^m=1,则: C0m−C1m C2m−... Cmm= C m 0 − C m 1 C m 2 − . . . C m m = C_m^0-C_m^1 C_m^2-... C_m^m= C0m−1−C0m−1−C1m−1 C1m−1 C2m−1−... Cm−1m−1=0 C m − 1 0 − C m − 1 0 − C m − 1 1 C m − 1 1 C m − 1 2 − . . . C m − 1 m − 1 = 0 C_{m-1}^0-C_{m-1}^0-C_{m-1}^1 C_{m-1}^1 C_{m-1}^2-... C_{m-1}^{m-1}=0
性质6
C0m C2m C4m...=C1m C3m C5m ...=2m−1 C m 0 C m 2 C m 4 . . . = C m 1 C m 3 C m 5 . . . = 2 m − 1
C_m^0 C_m^2 C_m^4...=C_m^1 C_m^3 C_m^5 ...=2^{m-1} 证明:这个根据性质4和性质5可知正确。
性质7
Crm n=C0m∗Crn C1m∗Cr−1n … Crm∗C0n C m n r = C m 0 ∗ C n r C m 1 ∗ C n r − 1 … C m r ∗ C n 0
C_{m n}^r=C_m^0*C_n^r C_m^1*C_n^{r-1} … C_m^r*C_n^0 证明:很简单,考虑我选出的r个物品在前m个物品有几个,在后n个物品里有几个即可。 特别的:
Cnm n=C0m∗C0n C1m∗C1n … Cmm∗Cmn C m n n = C m 0 ∗ C n 0 C m 1 ∗ C n 1 … C m m ∗ C n m
C_{m n}^n=C_m^0*C_n^0 C_m^1*C_n^1 … C_m^m*C_n^m 这个是根据性质1变形得到的。
性质8
n∗Cnm=m∗Cn−1m−1 n ∗ C m n = m ∗ C m − 1 n − 1
n*C_m^n=m*C_{m-1}^{n-1} 证明:运用通项公式 n∗Cnm= n ∗ C m n = n*C_m^n= n∗m!n!(m−n)!= n ∗ m ! n ! ( m − n ) ! = n*frac{m!}{n!(m-n)!}= m!(n−1)!(m−n)!= m ! ( n − 1 ) ! ( m − n ) ! = frac{m!}{(n-1)!(m-n)!}= m∗(m−1)!(n−1)!(m−n)!=m∗Cn−1m−1 m ∗ ( m − 1 ) ! ( n − 1 ) ! ( m − n ) ! = m ∗ C m − 1 n − 1 m*frac{(m-1)!}{(n-1)!(m-n)!}=m*C_{m-1}^{n-1}
性质9
∑i=1nCin∗i=n∗2n−1 ∑ i = 1 n C n i ∗ i = n ∗ 2 n − 1
sum_{i=1}^n C_n^i*i=n*2^{n-1} 证明:用通项公式 ∑ni=1Cin∗i=n∗2n−1= ∑ i = 1 n C n i ∗ i = n ∗ 2 n − 1 = sum_{i=1}^n C_n^i*i=n*2^{n-1}= ∑ni=1n!(i−1)!(n−i)!= ∑ i = 1 n n ! ( i − 1 ) ! ( n − i ) ! = sum_{i=1}^n frac{n!}{(i-1)!(n-i)!}= (∑ni=1(n−1)!(i−1)!(n−i)!)∗n= ( ∑ i = 1 n ( n − 1 ) ! ( i − 1 ) ! ( n − i ) ! ) ∗ n = (sum_{i=1}^n frac{(n-1)!}{(i-1)!(n-i)!})*n= (∑n−1i=0Cin)∗n= ( ∑ i = 0 n − 1 C n i ) ∗ n = (sum_{i=0}^{n-1} C_n^i)*n= 现在看性质4。 n∗2n−1 n ∗ 2 n − 1 n*2^{n-1}
性质10
∑i=1nCin∗i2=n∗(n 1)∗2n−2 ∑ i = 1 n C n i ∗ i 2 = n ∗ ( n 1 ) ∗ 2 n − 2
sum_{i=1}^n C_n^i*i^2=n*(n 1)*2^{n-2} 证明: 和上一个性质有些类似。 ∑ni=1Cin∗i2= ∑ i = 1 n C n i ∗ i 2 = sum_{i=1}^n C_n^i*i^2= 用和上面差不多的方法得到: (∑n−1i=0Cin−1∗(i 1))∗n= ( ∑ i = 0 n − 1 C n − 1 i ∗ ( i 1 ) ) ∗ n = (sum_{i=0}^{n-1} C_{n-1}^i*(i 1))*n= (∑n−1i=0Cin−1∗i ∑n−1i=0Cin−1)∗n= ( ∑ i = 0 n − 1 C n − 1 i ∗ i ∑ i = 0 n − 1 C n − 1 i ) ∗ n = (sum_{i=0}^{n-1} C_{n-1}^i*i sum_{i=0}^{n-1}C_{n-1}^i)*n= 用性质9和性质4可以得到: (2n−2∗(n−1) 2n−1)∗n= ( 2 n − 2 ∗ ( n − 1 ) 2 n − 1 ) ∗ n = (2^{n-2}*(n-1) 2^{n-1})*n= 很明显 2n−1=2∗2n−2 2 n − 1 = 2 ∗ 2 n − 2 2^{n-1}=2*2^{n-2} 所以原式= 2n−2∗(n 1)∗n 2 n − 2 ∗ ( n 1 ) ∗ n 2^{n-2}*(n 1)*n
性质11
∑i=0n(Cin)2=Cn2n ∑ i = 0 n ( C n i ) 2 = C 2 n n
sum_{i=0}^n (C_n^i)^2=C_{2n}^n
证明:boshi说,他的门前有两棵树,
一棵是枣树,另一棵也是枣树,每棵树上有n个枣子,每个枣子都有一个不同的神奇的膜法符号。现在boshi从两棵树上一共打下了n个枣子,那么一共有多少种方案?是
Cn2n C 2 n n
C_{2n}^n,也是第一棵树上打下i个枣子,从第二棵树上打下(n-i)棵枣子的方案,根据乘法原理乘起来,又因为
Cin=Cn−in C n i = C n n − i
C_n^i=C_n^{n-i},所以得到上一个式子。
卢卡斯定理
简单的说就是求 Cnm%p C m n % p C_m^n % p的时候可以化作 Cnm=Cn/pm/p∗Cn%pm%p C m n = C m / p n / p ∗ C m % p n % p C_m^n =C_{m/p}^{n/p} *C_{m % p}^{n % p},那么只要递归 Cn/pm/p C m / p n / p C_{m/p}^{n/p}即可。
证明我蠢我不会自己想
后记
啊啊啊搞了一下午终于证完了累死了。。。感觉自己和组合数的感情有了明显的提升(才怪)。。。
在文章的最后%一发数王。。。
%%%%%%%%%数王您太强了%%%%%%%%%%%
数王说以上所有定理都可以用那个那个那个证,虽然我不知道那个是哪个,但是反正好强啊%%%%%%%%
好吧以上都是不正经内容,正经内容是:
在做题的时候大家可能不一定都会遇到这些性质,但是在手动证明完这些性质后对于组合数变形的问题就会有更深一层的理解,总之,组合数性质可以用一下方法推出:
1.情景假设法(假设boshi从枣树选枣子的方案。。。)
2.隔板法(boshi把枣子放成一排,通过在枣子间添加隔板来分组。。。)
3.通向公式法
4.递推公式法
以上。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159936.html原文链接:https://javaforall.cn