组合计数

组合计数

关于排列组合是真的头疼...这里总结一下相关的知识点...都是简单的..
首先从最基础的开始

1.加法原理

若完成一件事的方法有\(n\)类,其中第\(i\)类的党发包括\(a_i\)种不同的的方法,且这些方法互不重合,则完成整件事共有\(a_1+a_2+a_3+\cdots+a_n\)种不同的方法。

这个应该很好理解吧!就是将整件事情分成若干类,由于每一类都能独立的王成这一件事情,所以将所有的\(a_i\)相加就行了。

2.乘法原理

若完成一件事需要\(n\)个步骤,其中第\(i\)个步骤有\(a_i\)种不同的的完成方法,且这些步骤互不干扰,则完成这件事共有\(a_1+a_2+a_3+\cdots+a_n\)种不同的方法。

这个也还行,每个步骤都是整件事情的一部分,当其他的步骤不变时,其中一个步骤有\(a_i\)中选择,这样他的贡献就是\(ans*a_i\),所以总的答案贡献就是所有的\(a_i\)相乘。

小结:其实加法原理和乘法原理不同点就在于到底是分成\(n\)类还是\(n\)个步骤,换句话说就是考虑你这\(n\)个事情到底能独立的解决整件事情还是整件事情的一部分。

3.排列数

从n个元素中依次选出m个元素排成一列,产生的不同排列的数量为:

\[A^m_n(也可记作P^m_n)= \frac{n!}{(n-m)!}=n*(n-1)*\cdots*(n-m+1) \]

这个证明还是很简单的,我们依次考虑去选这\(m\)个元素,将整件事分成对\(m\)个步骤,第一个元素我们可以从\(n\)个元素中任选其一,则\(a_1=n\),第二个元素只能从\(n-1\)个元素中选择其一,所以\(a_2=n-1\),一直这样到第\(m\)个元素,那时我们已经选了\(m-1\)个元素,所以只剩下\(n-m+1\)个元素,则\(a_m=n-m+1\),这很明显是乘法原理,所以我们将他们相乘就行。

4.组合数

从n个不同的元素中取出\(m\)个组成一个集合(不考虑顺序),产生的不同的集合数量为

\[C^m_n=\frac{n!}{m!(n-m)!}=\frac{n*(n-1)*\cdots*(n-m+1)}{m*(m-1)*\cdots*2*1} \]

这个证明是由排列数推出来的,首先要知道\(m\)元素的全排列为\(m!\).这个用推排列数的方法容易推得.由于排列数有顺序,而组合数不考虑顺序,所以我们在排列数的基础上消去顺序的影响就行了,每一种\(m\)个元素的集合由于顺序的缘故会有\(m!\)种方案,但这\(m!\)种方案在组合数种只算一种,所以需要除以\(m!\)就行了。所以\(C_n^m=\frac{A^m_n}{m!}\).

性质:

1.\(C_n^m=C^{n-m}_n\)

证明:
由组合数的定义,从n个元素中选m个元素组成的集合和未选剩下的集合是一一对应的,所以方案数是相等的。

2.\(C_n^m=C_{n-1}^m+C^{m-1}_{n-1}\)

证明:
我们可以考虑第\(n\)个元素选不选,分成两类,如果选的话,我们只需要在剩下的\(n-1\)个元素中选择\(m-1\)个元素就行,方案数为\(C_{n-1}^{m-1}\).如果不选,我们就需要在剩下的\(n-1\)个元素中选择\(m\)个元素,方案数为\(C_{n-1}^m\)。符合加法原理,相加即可。

3.\(C_n^0+C_n^1+C_n^2+\cdots+C_n^n=2^n\)

证明:
\(n\)个不同的元素选出若干个元素组成一个集合(可以不选),一共有n+1类方法,分别是取走\(0,1,2,\cdots,n\),这\(n+1\)类方法的方案数分别是相对应得组合数。符合加法原理,全部相加。但从另一个方法去想,每一个元素都有选和不选两种选择,符合乘法原理,\(n\)个2相乘,答案为\(2^n\).

对于程序来说,如果要用到组合数,根据性质二,对于\(0≤x≤y≤0\)的所有组合数\(C^y_x\)直接递推出来,复杂度为\(O(n^2)\)
比较有用和常见的是用一个数组保存阶乘,一个数组保存阶乘逆元。用到时直接用就可以了。

5.二项式定理

\({(n+m)}^n=\sum_{k=0}^n C_n^ka^kb^{n-k}\)

证明:
数学归纳法。
\(n=1\)时,\({(a+b)}^1=C_1^0a^0b^1+C_1^1a^1b^0=a+b.\)
假设当\(n=m\)时命题成立,当\(n=m+1\)时:

\[{(a+b)}^{m+1}=(a+b)^m(a+b)=(a+b)\sum_{k=0}^mC_m^ka^kb^{m-k} \]

\[=\sum_{k=0}^mC_m^ka^{k+1}b^{m-k}+\sum_{k=0}^mC_m^ka^kb^{m-k+1} \]

\[=\sum_{k=1}^{m+1}C_m^{k-1}a^{k}b^{m-k+1}+\sum_{k=0}^mC_m^ka^kb^{m-k+1} \]

\[=\sum_{k=0}^{m+1}C_m^{k-1}a^{k}b^{m-k+1}+\sum_{k=0}^{m+1}C_m^ka^kb^{m-k+1} \]

\[=\sum_{k=0}^{m+1}(C_m^{k-1}+C_m^k)a^{k}b^{m-k+1}=\sum_{k=0}^{m+1}C_{m+1}^ka^{k}b^{m+1-k} \]

证毕。
\(to\) \(be\) \(continued...\)

posted @ 2020-05-29 15:19  逆天峰  阅读(374)  评论(0编辑  收藏  举报
作者:逆天峰
出处:https://www.cnblogs.com/gcfer//