详解组合数相关性质

Posted fusiwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解组合数相关性质相关的知识,希望对你有一定的参考价值。

浅谈组合数相关性质

本篇随笔简单讲解一下数学中组合数的相关性质。并且,因为博主是一名(OIer)(否则为啥要在高一学组合数),所以在本篇随笔中还会侧重组合数在信息学奥林匹克竞赛中的应用。综上所述,本篇随笔乃是学数学的,学(OI)的,学玄学的,学哲学的同志们的学习佳选。(不要个脸)

组合数的概念

这个板块是为对组合数毫无概念的同学留的。因为名字叫做组合数,所以肯定是和组合有关系的。

我们定义:(C_n^m)为在(n)个元素中选择(m)个元素的不同组合数量,即组合数。

啥叫组合呢?

简单来讲,对于一个集合来讲,从中随便拿出任意个元素所构成的一个子集就是组合。需要注意的是,组合和排列不一样,排列的数量还取决于取出的顺序,但是组合的数量只取决于这个组合中有什么元素。

比如,((1,2,3))((3,2,1))是同一个组合。

附录:

如果还不是很明白的小伙伴,可以参考蒟蒻的这篇博客:

排列组合相关知识

组合数公式:
[ C_n^m=frac{n!}{m!(n-m)!} ]

组合数的基本性质

规定

硬性规定,没有为什么。就像规定(0!=1)一样,不讲道理。

(C_n^0=1)(C_n^n=1)(C_0^0=1)

互补性

[ C_n^m=C_n^{n-m} ]

这个性质口胡起来就是,在含有(n)个元素的集合中选中(m)个元素的组合数等于在这个集合中选中(n-m)个元素的组合数。

这个性质很好理解和想象。我们每一次搞出一个还没有选过并合法的组合时,总会对应着一个这个组合的补集,而这些补集凑在一起就是(C_n^{n-m})

这个性质很重要!

组合恒等式

除了互补性,还有一个前导公式:
[ C_{n+1}^m=C_n^m+C_n^{m-1} ]
对于这个公式的理解,可以抽象一下:我们可以把(C_{n+1}^m)看成原本的(n)个元素中加入了一个新元素,那么根据分类计数原理,我们之前已经求出的组合数(C_n^m)中显然少了含有这种新元素的情况。那么就把它加上就好。因为选中这个新元素必定要把一种老元素剔除掉,所以应该加上(C_n^{m-1})

组合数的求解

光知道这些数学知识,在(OI)中可是没什么用。所以我们还要了解组合数的求法,在考场上熟练求解组合数,用它解决更大的问题。

首先,组合数可以用公式求(废话)。我们暴力套用公式,可以求出不爆(Longlong)的组合数。但是这种方法在多次求解组合数的时候显得比较鸡肋。因为多次求解组合数,如果再套公式就会大大增加时间复杂度。这个时候我们可以考虑弄出一份阶乘表,快速调用阶乘答案,来降低时间复杂度。

然后,我就要介绍信竞中最常用的组合数求法——

组合数递推法

组合数是可以递推求的。就是说,所有的组合数都可以由前面的组合数推导而来。

为什么呢?

就是因为上面证明过的那个公式:
[ C_{n+1}^m=C_n^m+C_n^{m-1} ]
我们令(n=n-1),那么就得出新公式:
[ C_n^m=C_{n-1}^m+C_{n-1}^{m-1} ]
那么,组合数(C_n^m)就可以通过递推来求解了。

初值是组合数硬性规定:

(C_0^0=0)(C_0^i=C_0^1=C_1^1=1)

然后就可以开始递推了。

递推公式是:
[ f[i][j]=f[i-1][j]+f[i-1][j-1] ]
我们发现,这个递推公式和另一个递推公式差不多——

杨辉三角

关于杨辉三角,如有蒙圈的小可爱请观摩我的这篇博客:

杨辉三角知识点详解

以上是关于详解组合数相关性质的主要内容,如果未能解决你的问题,请参考以下文章

逆元 - 组合数取模

排列组合详解

数论之旅6---组合数(组合大法好(,,? ? ?,,) )

杭电多校第八场05_Separated Number(组合数前缀和性质)

数论--组合数

逆元求组合数