排列组合的计算方法,别只是个公式,举个例子写的具体点?

教育 网编 2023-03-13 17:08 139 0

标准的排列组合先看一个例子 (1):

三个城市 A,B,C,从 A 到 B 有三条路 a₁, a₂, a₃ ,从 B 到 C 有两条路 b₁, b₂,问 从 A 到 C 有多少种走法?

排列组合的计算方法,别只是个公式,举个例子写的具体点?

解:

要 从 A 到 C 就 必须选择一条 A 到 B 的路 a 和 一条 B 到 C 的路 b,然后连成 A 到 C 的路 ab。

a 可以是 a₁, a₂, a₃ 有3种选法,b 可以是 b₁, b₂ 有3种选法,于是根据日常的经验,ab 的可能有:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

所有 ab 总共有 3 × 2 = 6 种可能。

这个例子就是 乘法法则:

若具有性质 a 的事件有 m 个,具有性质 b 的事件有 n 个,则 同时具有 性质 a 和 b 的事件有 m × n 个。

因为,

令 a 的 m 个事件为 a₁, a₂, ..., a_m,b 的 n 个事件为 b₁, b₂, ..., b_m,则根据日常的经验,ab 的可能有:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

乘法法则,还可以从 两项 扩展到 任意有限多项:

若具有性质 a₁, a₂, a₃, ..., a_n 的事件分别有 m₁, m₂, m₃, ..., m_n 个,则 同时具有 性质 a₁, a₂, a₃, ..., a_n 的事件有 m₁ × m₂ × m₃ × ... × m_n 个。

因为,

排列组合的计算方法,别只是个公式,举个例子写的具体点?

然后利用 两项的乘法法则,就得到:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

再看一个例子 (2):

总共有三个球 ①②③,从中挑选出两个排成一列,问有多少种挑选方案?

解:

挑出两个排成一列,分两步,

先从三个球 中任意 挑出一个球 a 放在序列的第一位;

再从挑剩下的 二个球 中 中任意 挑出一个球 a 放在序列的第二位;

这样就组成了 ab 的序列。构建 ab 序列的过程 和 例子 (1) 组成路线的过程 类似,因此 也 符合乘法法则。因为 a 是 3 选 1 有 3 种可能,b 是 2 选 1 有 2 种可能,所以 构建 ab 序列 有 3 × 2 = 6 种可能,具体如下:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

例子 (2) 就是 从 3 中取出 2 的排列,更一般地定义为:

从 n 个元素 中取出 m(≤ n) 个元素 排成一列,称为 从 m 中取出 n 的 排列,排列的方案个数称为排列数,记为 P(n, m)。

从 m 中取出 n 的 排列的构建过程如下:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

根据 乘法法则,有:

P(n, m) = n(n-1)(n-2)...(n-m+1)

而:

n! = n(n-1)(n-2)...(n-m+1)(n-m)(n-m-1)...1

(n-m)! = (n-m)(n-m-1)...1

故,

P(n, m) = n!/(n-m)!

排列组合的计算方法,别只是个公式,举个例子写的具体点?

比较特别的是:

从 n 中取出 n 个 的排列,就是 对 n 个元素进行各种排列,称为 全排列 ,P(n, n) = n!/(n-n)! = n!/0! = n!;

从 n 中取出 0 个 的排列,称为 零排列 ,P(n, 0) = n!/(n-0)! = n!/n! = 1;

排列组合的计算方法,别只是个公式,举个例子写的具体点?

将 例子 (2),改为 (2'):

总共有三个球,从中挑选出两个不考虑顺序,问有多少种挑选方案?

解:

我们前面已经 计算出了序列 ab 的排列数 P(3, 2),所谓不考虑顺序,也就是说,两个元素 a, b 的各种排列:ab, ba 算一种方案。

两个元素 a, b 的各种排列,就是 2 的全排列,即,P(2, 2)。于是 只需要 用 P(3, 2) 除以 P(2, 2) 就是 答案了:

P(3, 2) / P(2, 2) = 3!/((3-1)!2!) = 3

例子 (2') 就是 从 3 中取出 2 的组合,更一般地定义为:

从 n 个元素 中取出 m(≤ n) 个元素 不考虑顺序,称为 从 m 中取出 n 的 组合,组合的方案个数称为组合数,记为 C(n, m)。

根据例子 (2') 中的分析,有:

C(n, m) = P(n, m) / P(m, m) = P(n, m) = n!/((n-m)!m!)

排列组合的计算方法,别只是个公式,举个例子写的具体点?

比较特别的:

从 n 中取出 n 个 的组合,C(n, n) = n!/((n-n)!n!) = n!/(0!n!) = n!/n! = 1;

从 n 中取出 0 个 的组合,C(n, 0) = n!/((n-0)!0!) = n!/(n!0!) = n!/n! = 1;

一些特殊的排列组合考虑,问题 (3):3 个人去饭店吃饭,围坐在一张圆桌前,问有多少种坐法?

围坐成圈不同于排成一列,这是一种新的排列方式,于是定义:

从 n 个元素 中取出 m 个元素 排成一圈,称为 圆周排列,将 圆周排列数 记为 Q(n, m)。

分析:

对于标准排列,可得到的序列:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

若将序列排成一圈,

排列组合的计算方法,别只是个公式,举个例子写的具体点?

则显然,下面的 m 个排列只能算一种:

排列组合的计算方法,别只是个公式,举个例子写的具体点?

故,

Q(n, m) = P(n, m) / m

根据上面的分析结果,显然,问题(4) 的答案是 Q(3, 3) = P(3, 3) / 3 = 2,即,顺时针坐 和 逆时针左。

在排列组合中,默认挑选出来的m个元素是不能重复,但如果允许重复呢?

将 例子 (2'),改为:

总共有三个球,从中挑选出两个不考虑顺序,不过每次挑选时会将球的号码记录然后将球放回,问有多少种挑选方案? (2''-1)

有两个箱子,每个箱子里装着完全相同的三个球,从每个箱子里挑选1个不考虑顺序 ,问有多少种挑选方案? (2''-2)

(2''-1) 和 (2''-2) 本质是相同的,下面以 (2''-1) 为例。

分析:

首先,可以用穷举法。①②③ 中有放回的挑选2个球 组合,按照从小到大的排列顺序,有如下可能:

共有 6 种。

其次,可以将 有重复组合 转化为 无重复组合,方法如下:

对于任何一次的有重复组合结果,按照 从小到大的排列:

a₁ ≤ a₂

让 原来三个小球中 号码比 a₂ 大的小球的号码 都加 1, 然后 将 小球 a₂ 的号码 也加 1 并 添加到 三个小球 中。

这样以来,就将 从 3 个小球中 有放回的挑选 2 个组合 变为 从 4 个小球 中 无放回的挑选 2个组合。

具体操作如下(黑底为修改过的球):

将 ①②③ → ①① 改为 ① → ①

将 ①②③ → ②② 改为 ①② → ②

将 ①②③ → ③③ 改为 ①②③ → ③

将 ①②③ → ①② 改为 ①② → ①

将 ①②③ → ①③ 改为 ①②③ → ①

将 ①②③ → ②③ 改为 ①②③ → ②

反过来,对于从 4 个小球 ①②③④,无放回的挑选两个的组合结果,从小到大的排列顺序排列:

a₁ < a₂

让 原来 4 个小球 中 号码大于 a₂ 的小球的号码 都减 1,然后 将 a₂ 从 4 个小球 中 去除,并将 a₂ 的号码也 减 1。

这样以来,就将 从 4 个小球中 无放回的挑选 2 个组合 变为 从 3 个小球 中 有放回的挑选 2个组合。

具体操作如下(黑底为修改过的球):

将 ①②③④ → ①② 改为 ① → ①

将 ①②③④ → ①③ 改为 ①② → ①

将 ①②③④ → ①④ 改为 ①②③ → ①

将 ①②③④ → ②③ 改为 ①②→ ②

将 ①②③④ → ②④ 改为 ①②③ → ②

将 ①②③④ → ③④ 改为 ①②③ → ③

上面的事实说明:

3 取 2 有重复的组合数 ≡ 4 取 2 无重复的组合数,即,C(4, 2) = 6。

将 3 取 2 的情况 扩展到 n 取 m 有:

将 n 个数 取 m(≤ n) 个 有重复的组合 的结果,按照 从小到大的排列:

a₁ ≤ a₂ ≤ a₃ ≤ ... ≤ a_m (4)

对每个 aᵢ(i = 2, 3, ..., m) 重复一下操作:

让 被挑选数集 以及 (4) 中 所有比 aᵢ 大的数都加 1, 然后 将 aᵢ 加 1,并将 aᵢ 添加到 被挑选数集 中取;

这样以来,就将 n 个数 取 m(≤ n) 个 有重复的组合 变为 n+(m-1) 个数 取 m(≤ n) 个 无重复的组合。

反过来,对于 n+(m-1) 个数 取 m(≤ n) 个 无重复的组合 的结果,按照 从小到大的排列顺序排列:

a₁ < a₂ < a₃ < ... < a_m (5)

对每个 aᵢ(i = 2, 3, ..., m) 重复一下操作:

让 被挑选数集 以及 (5) 中 所有比 aᵢ 大的数都减 1, 然后,将 aᵢ 从 被挑选数集 中删除, 并将 aᵢ 在 (5) 中也减 1;

这样以来,n+(m-1) 个数 取 m(≤ n) 个 无重复的组合 变为 就将 n 个数 取 m(≤ n) 个 有重复的组合 。

综上,就证明了:

n 个数 取 m(≤ n) 个 有重复的组合 ≡ n+(m-1) 个数 取 m(≤ n) 个 无重复的组合

最终结果:

从 n 个元素 中取出 m 个元素,有重复组合 的组合数为:C(n+(m-1), m)。

题目: 从 A = {1,2, ..., n} 个数 中取 m(≤ [n / 2]) 个,不相邻组合,即,不存在包括 i 和 i + 1 的组合,问组合数是多了?

分析:

这里使用类似 有重复组合 的思路,将 不相邻组合 转化为 等价 的 标准组合。方法如下:

对于 从 A 个数 中取 m 个 的不相邻组合 的结果,按照从小到大的顺序排列:

a₁ < a₂ < a₃ < ... < a_m (6)

对每个 aᵢ(i = 2, 3, ..., m) 重复一下操作:

让 A 以及 (6) 中 所有大于 aᵢ 的数都减去 1,并将 aᵢ 从 A 删除,最后 在 (6) 中 让 aᵢ 减去 1。

这样以来,就将从 A 中取 m 个 的不相邻组合 变为 从 A’ = {1, 2, ..., n - (m-1) } 中取 m 个 的标准组合。

反过来,对于 从 A’ 中取 m 个 的标准组合 的结果,按照从小到大的顺序排列:

a₁ < a₂ < a₃ < ... < a_m (7)

对每个 aᵢ(i = 2, 3, ..., m) 重复一下操作:

让 A' 以及 (7) 中 所有大于 aᵢ 的数都加上 1,并将 aᵢ 也加上1 然后添加到 A' 中。

这样以来,就将 从 A’ 中取 m 个 的标准组合 变成 A 中取 m 个 的不相邻组合 。

综上,就证明了:

从 A = 中取 m 个 的不相邻组合 ≡ 从 A’ 中取 m 个 的标准组合

最终结果:

从 A = {1,2, ..., n} 个数 中取 m(≤ [n / 2]) 个,不相邻组合 的组合数为:C(n-(m-1), m)。

最后,除了以上介绍的这些较为基础的排列组合外,还有大量的排列组合问题存在,例如:

将 被选择集合 进行分类,比如:分为男女, 然后 对排列组合结果进行限制,比如:男女相等,男女相邻;

总之 排列组合的算法根据 具体问题不同而异,具体在进行解题时要发挥聪明才智,做到灵活多变,不要强行照搬套路。

由于篇幅有限,只能回答到这里了。

(本人数学水平同样有限,所以出错在所难免,非常欢迎各位老师批评指正。)

评论区