浅谈组合数相关性质

本篇随笔简单讲解一下数学中组合数的相关性质。并且,因为博主是一名\(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]
\]

我们发现,这个递推公式和另一个递推公式差不多——

杨辉三角

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

杨辉三角知识点详解

总结:

掌握组合数的概念,知道组合互补性质和组合恒等式的推导过程和结论。掌握组合数求解的通项公式法和递推公式法

对于组合数求解,有很多题目还卡递推求解,这个时候要再学习一些优化和卡常技巧。希望同学们能够在之后的题目中多多体会和掌握理解。

版权声明:本文为fusiwei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fusiwei/p/11838425.html