详解组合数相关性质
浅谈组合数相关性质
本篇随笔简单讲解一下数学中组合数的相关性质。并且,因为博主是一名\(OIer\)(否则为啥要在高一学组合数),所以在本篇随笔中还会侧重组合数在信息学奥林匹克竞赛中的应用。综上所述,本篇随笔乃是学数学的,学\(OI\)的,学玄学的,学哲学的同志们的学习佳选。(不要个脸)
组合数的概念
这个板块是为对组合数毫无概念的同学留的。因为名字叫做组合数,所以肯定是和组合有关系的。
我们定义:\(C_n^m\)为在\(n\)个元素中选择\(m\)个元素的不同组合数量,即组合数。
啥叫组合呢?
简单来讲,对于一个集合来讲,从中随便拿出任意个元素所构成的一个子集就是组合。需要注意的是,组合和排列不一样,排列的数量还取决于取出的顺序,但是组合的数量只取决于这个组合中有什么元素。
比如,\((1,2,3)\)与\((3,2,1)\)是同一个组合。
附录:
如果还不是很明白的小伙伴,可以参考蒟蒻的这篇博客:
组合数公式:
组合数的基本性质
规定
硬性规定,没有为什么。就像规定\(0!=1\)一样,不讲道理。
\(C_n^0=1\),\(C_n^n=1\),\(C_0^0=1\)。
互补性
这个性质口胡起来就是,在含有\(n\)个元素的集合中选中\(m\)个元素的组合数等于在这个集合中选中\(n-m\)个元素的组合数。
这个性质很好理解和想象。我们每一次搞出一个还没有选过并合法的组合时,总会对应着一个这个组合的补集,而这些补集凑在一起就是\(C_n^{n-m}\)。
这个性质很重要!
组合恒等式
除了互补性,还有一个前导公式:
对于这个公式的理解,可以抽象一下:我们可以把\(C_{n+1}^m\)看成原本的\(n\)个元素中加入了一个新元素,那么根据分类计数原理,我们之前已经求出的组合数\(C_n^m\)中显然少了含有这种新元素的情况。那么就把它加上就好。因为选中这个新元素必定要把一种老元素剔除掉,所以应该加上\(C_n^{m-1}\)。
组合数的求解
光知道这些数学知识,在\(OI\)中可是没什么用。所以我们还要了解组合数的求法,在考场上熟练求解组合数,用它解决更大的问题。
首先,组合数可以用公式求(废话)。我们暴力套用公式,可以求出不爆\(Longlong\)的组合数。但是这种方法在多次求解组合数的时候显得比较鸡肋。因为多次求解组合数,如果再套公式就会大大增加时间复杂度。这个时候我们可以考虑弄出一份阶乘表,快速调用阶乘答案,来降低时间复杂度。
然后,我就要介绍信竞中最常用的组合数求法——
组合数递推法
组合数是可以递推求的。就是说,所有的组合数都可以由前面的组合数推导而来。
为什么呢?
就是因为上面证明过的那个公式:
我们令\(n=n-1\),那么就得出新公式:
那么,组合数\(C_n^m\)就可以通过递推来求解了。
初值是组合数硬性规定:
\(C_0^0=0\),\(C_0^i=C_0^1=C_1^1=1\)。
然后就可以开始递推了。
递推公式是:
我们发现,这个递推公式和另一个递推公式差不多——
杨辉三角。
关于杨辉三角,如有蒙圈的小可爱请观摩我的这篇博客:
总结:
掌握组合数的概念,知道组合互补性质和组合恒等式的推导过程和结论。掌握组合数求解的通项公式法和递推公式法。
对于组合数求解,有很多题目还卡递推求解,这个时候要再学习一些优化和卡常技巧。希望同学们能够在之后的题目中多多体会和掌握理解。