码迷,mamicode.com
首页 > 其他好文 > 详细

详解组合数相关性质

时间:2019-11-11 21:58:53      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:ongl   应用   一起   相关性   推导   关系   另一个   lin   相关   

浅谈组合数相关性质

本篇随笔简单讲解一下数学中组合数的相关性质。并且,因为博主是一名\(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] \]
我们发现,这个递推公式和另一个递推公式差不多——

杨辉三角

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

杨辉三角知识点详解

详解组合数相关性质

标签:ongl   应用   一起   相关性   推导   关系   另一个   lin   相关   

原文地址:https://www.cnblogs.com/fusiwei/p/11838425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!