跳转至

排列组合

排列组合简介

排列组合是组合数学中的一种。排列就是指从给定个数的元素中取出指定个数的元素进行排序;组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数。 排列组合与古典概率论关系密切。

在高中初等数学中,排列组合多是利用列表、枚举等方法解题。


排列组合公式及定义

排列的定义

n 个不同元素中,任取 m m≤n,m n 均为自然数, 下同)个元素按照一定的顺序排成一列,叫做从 n 个不同元素中取出 m 个元素的一个排列;从 n 个不同元素中取出 m ( m≤n ) 个元素的所有排列的个数,叫做从 n 个不同元素中取出 m 个元素的排列数,用符号 A_n^m 表示。

排列的计算公式

A_n^m = n(n-1)(n-2) \cdots (n-m+1) = \frac{n!}{(n - m)!}

n! 代表 n 的阶乘,即 6! = 1 \times 2 \times 3 \times 4 \times 5 \times 6 .

组合的定义

n 个不同元素中,任取 m ( m≤n ) 个元素并成一组,叫做从 n 个不同元素中取出 m 个元素的一个组合;从 n 个不同元素中取出 m ( m≤n ) 个元素的所有组合的个数,叫做从 n 个不同元素中取出 m 个元素的组合数。用符号 C_n^m 表示。

组合的计算公式

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

排列组合的分类

排列

全排列 :
n 个人全部来排队,队长为 n 。第一个位置可以选 n 个,第二位置可以选 n-1 个,以此类推得:

A_n^n = n(n-1)(n-2) \cdots 3 × 2 × 1 = n!

部分排列 :
n 个人选 m 个来排队 ( m \le n )。第一个位置可以选 n 个,第二位置可以选 n-1 个,以此类推,第 m 个(最后一个)可以选 n-m+1 个,得:

A_n^m = n(n-1)(n-2) \cdots (n-m+1) = \frac{n!}{(n - m)!}

组合

n 个人 m ( m \le n ) 个出来,不排队,不在乎顺序 C_n^m 。如果在乎排列那么就是 A_n^m ,如果不在乎那么就要除掉重复,那么重复了多少?同样选出的来的 m 个人,他们还要 “全排” 得 A_n^m ,所以得:

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

组合数的性质

C_n^m = C_{n}^{n-m}
C_n^m = C_{n-1}^{m} + C_{n-1}^{m-1}

如果编程实现,以上两个公式有没有帮助?

圆排列

n 个人全部来围成一圈为 Q_n^n ,其中已经排好的一圈,从不同位置断开,又变成不同的队列。
所以:

Q_n^n \times n = A_n^n → Q_n = \frac{A_n^n}{n} = (n-1)!

由此可知:部分圆排

Q_n^r = \frac{A_n^r}{r} = \frac{n!}{r \times (n-r)!}

重复排列(有限)

k 种不一样的球,每种球的个数分别是 a_1,a_2,\cdots,a_k ,设 n=a_1+a_2+…+a_k ,这 n 个球的全排列数,为

\frac{n!}{a_1! \times a_2! \times \cdots \times a_k!}

重复组合(无限)

n 种不一样的球,每种球的个数是无限的, 从中选 k 个出来,不用排列,是组合,为 C_{n+k-1}^{k} .

证明:

假设选出来的数(排好序):

1 \le b_1 \le b_2 \le b_3 \le \cdots \le b_k \le n

这题的难点就是 = 号,现在去掉 = 号,所以有:

1 \le b_1 < b_2+1 < b_3+2 < b_4+3 < \cdots < b_k+k-1 \le n+k-1

中间还是 k 个数!不过已经不是 b 系列,而是 c 系列, 假设 c[i]=b[i]+i-1 ,所以

1 \le c_1 < c_2 < c_3 < c_4 < \cdots < c_k \le n+k-1

所以问题就开始转换为无重复组合问题,即在 n+k-1 个元素中选中 k 个的组合数 C_{n+k-1}^{k}

不相邻的排列

1 \sim n n 个自然数中选 k 个,这 k 个数中任何两个数不相邻数的组合有 C_{n-k+1}^{k} 种。
证明和上面的相同(其实就是懒得写),请自行证明 XD

错位排列(错排)

先看一个小问题:
5 本书,编号分别是 1,2,3,4,5 ,现在要把这 5 本书是放在编号 1,2,3,4,5 的书架上,要求书的编号和书架的编号不一样,请问有多少种不一样的放置方法?

再看一个小问题:
胸口贴着编号为 1,2,\cdots,n n 个球员分别住在编号为 1,2,\cdots,n n 个房间里面。现规定每个人住一个房间,自己的编号不能和房间的编号一样。

这就是错排问题。当 n=3 时,只能为 312 或 231 这两种。

那么错排问题的解题思路是什么呢?我们以第二个问题为例: 递推还是王道!!!

刚开始所有球员都住在和自己编号一样的房间里面。然后错排开始了,第 n 个球员从第 n 个房间出来。

第一种情况:
n 想和 i(1 \le i \le n-1) 其中任何一个球员换房间,其他 n-2 个人换房间的事情,他们就不管了。其他 n-2 个球员的的错排数为 d[n-2] n 可以和前面 1 \sim n-1 对换,所以有 n-1 d[n-2]

第二种情况:
n 想和 i(1 \le i \le n-1) 其中任何一个球员换房间,但是 n 只想 i 住在第 N 个房间,而 n 不想住第 I 个房间。

可能你会这样想:那么 n 可以让 j 住在第 I 号房间里面,然后 n 住在房间 J 。抱歉, j(1 \le j \le n-1,j\neq i) 生气 n 为什么一开始就去找 i 不直接来找 j 。没办法, n 把自己胸口的编码 N 换成了 I ,他假装自己是 i ,然后错排 1 \sim n-1 (也就是 d[n-2] )的时候参与进去,这样自己就不会呆在第 I 号房间了。所以有 n-1 d[n-1]

如果理解了以上内容,那么错排的公式就出来了:

d_n = (n-1)(d_{n-2} + d_{n-1}) (n\geq 3)

同时也有:

d_n = n \times d_{n-1} + (-1)^n

错位排列数列为 0,1,2,9,44,265,\cdots

加法 & 乘法原理

加法原理

完成一个工程可以有 n 类办法, a[i](1 \le i \le n) 代表第 i 类方法的数目。
那么完成这件事共有 S=a[1]+a[2]+\cdots +a[n] 种不同的方法。

乘法原理

完成一个工程需要分 n 个步骤, a[i](1 \le i \le n) 代表第 i 个步骤的不同方法数目。
那么完成这件事共有 S = a[1] \times a[2] \times \cdots \times a[n] 种不同的方法。

两原理的区别

一个与分类有关,一个与分步有关;加法原理是 “分类完成”,乘法原理是 “分步完成”。

几个关于组合的公式

C_n^0 + C_n^1 + C_n^2 + C_n^3 + \cdots + C_n^m = 2^n
C_n^r + C_n^{r+1} = C_{n+1}^{r+1}
\sum_{i=0}^m C_n^i C_m^{m-i} = C_{m+n}^m(n \geq m)

评论