计数原理与排列组合

计数原理

例题1:

用一个大写的英文字母 一个阿拉伯数字给教室里的一个座位编号,总共能编出多少种不同的号码?

或:\(a \lor b\)

  • \(a\)\(b\)
  • \(b\)\(a\)
  • \(a\)\(b\)

且:\(a \land b\)

  • \(a\)\(b\)

非:\(\urcorner a\)

  • \(a\)

解:英文字母共有26个,阿拉伯数字共有10个,总共能编出26+10=36种不同的号码。

分类加法计数原理:完成一件事,有 \(n\) 类办法,在第 \(1\) 类办法中有 \(m_1\) 种不同的方法,在第 \(2\) 类办法中有 \(m_2\) 种不同的方法 \(\dots \dots\) 在第 \(n\) 类办法中有 \(m_n\) 种不同的方法,那么完成这件事共有:
$N = m_1 + m_2 + \dots + m_n = \sum _{i=1} ^n m_i $种不同的方法。

例题2:

用前六个伯数字给教室里的一个座位编号,总共能编出多少种不同的号码?

解:由于前六个英文字母中的任意一个都能与九个数字中的任意一个组成一个号码,而且他们互不相同,一共能编出 \(6 \times 9 = 54\)种不同的号码。

分步乘法计数原理:做 \(n\) 件事,完成它需要分成 \(n\) 个步骤,做第 \(1\) 步有 \(m_1\) 种不同的方法,做第 \(2\) 步有 \(m_2\) 种不同的方法\(\dots \dots\) 做第 \(n\) 步有 \(m_n\) 种不同的方法。那么完成这件事共有 \(N = m_1 \times m_2 \times m_3 \times \dots \times m_n = \prod_{i=1}^{n} m_i\) 种不同的方法。

例题3:

要从甲、乙、丙 \(3\) 幅不同的画中选出 \(2\) 幅,分别挂在左、右两边墙的指定位置。

解:
分两步:
\(1\) 步:选
\(2\) 步:挂

甲 -> 乙、丙
(甲,乙) (甲,丙)

乙 -> 丙
(乙,丙)

(甲,乙)
甲、乙
乙、甲

(甲,丙)
甲、丙
丙、甲

(乙,丙)
乙、丙
丙、乙

\(N=3 \times 2=6\)

题外话,数集:
\(N\) : 非负整数集(自然数集)
\(N\text*\) : 正整数集
\(Z\) : 整数集
\(R\) : 实数集
\(Q\) : 有理数集
\(C\) : 复数集
\(R+\)\(R-\) : 正(负)实数集
\(Q+\)\(Q-\) : 正(负)有理数集

排列与组合

例题4:

从甲、乙、丙 \(3\) 名同学中选出 \(2\) 名参加一项活动,其中 \(1\) 名同学参加上午的活动,另 \(1\) 名同学参加下午的活动,有几种不同的选法?

解:

(甲,乙)
甲、乙
乙、甲

(甲,丙)
甲、丙
丙、甲

(乙,丙)
乙、丙
丙、乙

\(3 \times 2 = 6\)

排列:一般地,从 \(n\) 个不同元素中取出 \(m(m \le n)\)个元素,并按照一定的顺序排成一列,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个排列。

排列数:我们把从 \(n\) 个不同元素中取出 \(m(m \le n)\) 个元素的所有
不同排列的个数,叫做叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的排列数,用符号 \(A_n^m\) 表示。

填空可以分为 \(m\) 个步骤完成:
\(1\) 步,从 \(n\) 个不同元素中任选 \(n\) 个填在第 \(1\) 位,有 \(n\) 种选法;
\(2\) 步,从剩下的 \((n一1)\) 个元素中任选 \(1\) 个填在第 \(2\) 位,有 \((n-1)\) 种选法;
\(3\) 步,从剩下的 \((n一2)\) 个元素中任选 \(1\) 个填在第 \(3\) 位,有 \((n-2)\) 种选法;
\(m\) 步,从剩下的 \((n-(m一1))\) 个元素中任选 \(1\) 个填在第m位,有 \((n-m+1)\)种选法。

根据分步乘法计数原理,\(m\) 个空位的填法种数为
\(n(n-1)(n-2) \dots (n-m+1)\).

得到公式:
\(A_n^m = n(n-1)(n-2) \dots (n-m+1)\).

其中 \(m,n \in N \text*\),并且 \(m \le n\),这个公式叫做排列数公式。

特别的,我们把 \(n\) 个不同元素全部取出的一个排列,叫做 \(n\) 个元素的一个全排列。
\(A_n^n = n(n-1)(n-2) \times \dots \times 3 \times 2 \times 1\).

也就是说,将 \(n\) 个不同的元素全部取出的排列数,等于正整数 \(1\)\(n\) 的连乘积,正整数 \(1\)\(n\) 的连乘积,叫做 \(n\) 的阶乘,用 \(n!\) 表示,于是 \(n\) 个元素的全排列公式还可以写成:

\(A_n^n = n!\).

通过课本上的例题我们发现
\(A_7^3=21=\frac{A_7^7}{A_4^4}=\frac{7!}{4!}=210\).
\(A_6^4 \times A_2^2 = 6 \times 5 \times 4 \times 3 \times 2 \times 1 = 6! =720\).

观察发现:
\(A_n^m = n(n-1)(n-2) \dots (n-m+1) = \frac{n(n-1)(n-2) \dots (n-m+1)(n-m) \times \dots \times 3 \times 2 \times 1}{(n-m) \times \dots \times 2 \times 1} = \frac{A_n^n}{A_{n-m}^{n-m}} = \frac{n!}{(n-m)!}\)

所以,排列数公式还可以写成 \(A_n^m = \frac{n!}{(n-m)!}\)

组合

例题5

从甲、乙、丙 \(3\) 名同学中选出 \(2\) 名去参加一项活动,有几种不同的选法?

解:列举出所有可能的选法:甲乙 甲丙 乙丙。
一共 \(6\) 种。
一般的,从 \(n\) 个不同元素中取出 \(m (m \le n)\) 个元素合成一组,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个组合。

赵老师口诀:
相同即无序,无序就组合。
不同即有序,有序即排列。

类比排列数的概念,我们引进组合数概念:

\(n\) 个不同元素中取出 \(m (m \le n)\) 个元素的所有不同组合的个数,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个组合数,用符号 \(C_n^m\) 表示.

我们发现求从 \(n\) 个不同元素中取出 \(m\) 个元素的排列数,可看作由以下 \(2\) 个步骤得到的:

  1. 从这 \(n\) 个不同元素中取出 \(m\) 个元素,共有 \(C_n^m\) 种不同的取法;
  2. 将取出的 \(m\) 个元素做全排列,共有 \(A_m^m\) 种不同的排法。 根据分步乘法计数原理, 有 \(A_n^m= C_n^m \times A_m^m\)

所以求得:
\(C_n^m = \frac{A_n^m}{A_m^m} = \frac{n(n-1)(n-2) \dots (n-m+1)}{m!}\)

这里 \(n,m \in N \text*\),并且 \(m \le n\),这个公式叫做组合数公式。

因为 \(A_n^m = \frac{n!}{(n-m)!}\)

所以上面的组合数公式还可以写成:

\(C_n^m = \frac{n!}{m!(n-m)!}\)

另外,我们规定 \(C_n^0 = 1\)

OI中的组合数:
求组合数的递推代码:

#include<bits/stdc++.h>
using namespace std;
int C[1005][1005];
//C(i,j) 0<=i<=n,0<=j<=i 要求这个范围的组合数
signed main(){
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=0;i<=n;i++){
		C[i][0]=C[i][i]=1;
		for(int j=1;j<i;j++)
			C[i][j]=C[i-1][j-1]+C[i-1][j];
	}
	cout<<C[n][m];
	return 0;
}

组合数的性质:

  • 性质1:

一般地,从 \(n\) 个不同元素中取出 \(m\) 个元素后,必然剩下 \(n-m\) 个元素。因此从 \(n\) 个不同元素中取出 \(m\) 个元素的组合,与剩下的 \(n-m\) 个元素的组合一一对应。这样,从 \(n\) 个不同元素中取出 \(m\) 个元素的组合数,等于从这 \(n\) 个不同元素中取出 \(n-m\) 个元素的组合数, 于是我们有:

\(C_n^m = C_{n}^{n-m}\)

  • 性质2:

\(C_{n}^m = C_{n-1}^{m-1} + C_{n-1}^m\)

证明:

\(C_{n-1}^{m-1}+C_{n-1}^{m} = \frac{(n-1)!}{(m-1)!(n-m)!} + \frac{(n-1)!}{m!(n-1-m)!} = \frac{(n-1)!}{m!(n-m)!} + [m+(n-m)] = \frac{n!}{m!(n-m)!}\)

\(C_n^m = \frac{n!}{m!(n-m)!}\)

  • 性质3

\(C_n^m = \frac{m+1}{n+1} C_{n+1}^{m+1}\)

杨辉三角

观察杨辉三角的相邻两行,可以发现,三角形的两个腰上的数都是 \(1\),其余的数都等于他肩上的两个数相加,我们设杨辉三角中任一不为 \(1\) 的数为 \(C_{n}^r\), 那么它肩上的两个数分别为

\(C_{n}^r = C_{n-1}^{r-1} + C_{n-1}^r\)

证明:

\(C_{n-1}^{r-1}+C_{n-1}^{r} = \frac{(n-1)!}{(r-1)!(n-r)!} + \frac{(n-1)!}{r!(n-1-r)!} = \frac{(n-1)!}{r!(n-r)!} + [r+(n-r)] = \frac{n!}{r!(n-r)!}\)

\(C_n^r = \frac{n!}{r!(n-r)!}\)

二项式定理

二项式定理研究的是 \((a+b)^{n}\) 的展开式。

我们在学习初中奥数的时候背过以下公式:

\((a+b)^{1}=a+b\)

\((a+b)^{2}=a^{2}+2ab+b^{2}\)

\((a+b)^{3}=a^{3}+3a^{2}b+3ab^{2}+b^{3}\)

\((a+b)^{4}=a^{4}+4a^{3}b+6a^{2}b^{2}+4ab^{3}+b^{4}\)

\(\dots\) \(\dots\)

在初中我们学习了完全平方公式,推导过程如下:
\((a+b)^2 = (a+b) (a+b) = a^2 + ab + ab + b^2 = a^2 + 2ab + b^2\)

我们发现,在展开的过程中得到多项式(括号)相乘时,我们运用了乘法分配律,也就是前面括号的每一项乘遍了后面括号的每一项,可以利用计数原理,写成组合数的形式: \(C_2^0 a^2 + C_2^1 a b + C_2^2 b^2\)

思考至少为 \(3\) 的情况,我们发现 \((a + b)^3 = C_3^0 a^3 + C_3^1 a^2 b + C_3^2 a b^2 + C_3^3 b^3\)

从上述对具体问题的分析得到启发,对于任意正整数 \(n\),我们有如下猜想:
$(a+b)^n = C_n^0 a^n + C_n^1 a^{n-1} b^1 + \dots + C_n^k a^{n-k} b^k + \dots + C_n^n b^n $

\(n \in N\text*\)

上述公式叫做 二项式定理,右边的多项式叫做 \((a+b)^n\)二项展开式,其中各项的系数 \(C_n^k (k = 0, 1, 2, \dots , n)\) 叫做 二项式系数,式中的 \(C_n^k a^{n-k} b^k\) 叫做二项展开式的 通项,用 \(T_{k+1}\) 表示,,即通项为展开式的第 \(k+1\) 项:

\(T_{k+1} = C_n^k a^{n-k} b^k\)

在二项式定理中,若设 \(a = 1,b = x\),则得到公式:

$(1+x)^n = C_n^0 + C_n^1 x + C_n^2 x^2 + \dots + C_n^k x^k + \dots + C_n^n x^n $

处理了一些关于二项式定理的习题,后面补。

posted @ 2023-08-24 20:13  FinderHT  阅读(31)  评论(1编辑  收藏  举报