【排列组合基本公式及算法】在数学中,排列与组合是研究从一组元素中选取若干个元素进行排列或组合的规律。它们广泛应用于概率、统计、计算机科学等领域。以下是排列与组合的基本公式及其算法总结。
一、排列与组合的区别
| 项目 | 排列(Permutation) | 组合(Combination) |
| 定义 | 从n个不同元素中取出m个元素,并按一定顺序排列 | 从n个不同元素中取出m个元素,不考虑顺序 |
| 是否有序 | 是 | 否 |
| 示例 | 3个数字1,2,3中取2个排列:12, 21, 13, 31, 23, 32 | 3个数字1,2,3中取2个组合:12, 13, 23 |
二、排列的基本公式
1. 全排列(n个元素全部排列)
$$
P(n) = n! = n \times (n-1) \times (n-2) \times \cdots \times 1
$$
2. 部分排列(从n个元素中取m个排列)
$$
P(n, m) = \frac{n!}{(n-m)!}
$$
示例:从5个不同字母中选出3个进行排列,共有:
$$
P(5, 3) = \frac{5!}{(5-3)!} = \frac{5!}{2!} = 120 / 2 = 60
$$
三、组合的基本公式
从n个元素中取出m个进行组合,其公式为:
$$
C(n, m) = \binom{n}{m} = \frac{n!}{m!(n-m)!}
$$
示例:从5个不同字母中选出3个进行组合,共有:
$$
C(5, 3) = \frac{5!}{3!2!} = \frac{120}{6 \times 2} = 10
$$
四、排列与组合的算法实现(以Python为例)
| 功能 | 算法描述 | Python代码示例 |
| 全排列 | 使用递归或库函数生成所有排列 | `import itertools; list(itertools.permutations([1,2,3]))` |
| 部分排列 | 从n个元素中选m个排列 | `list(itertools.permutations([1,2,3,4], 2))` |
| 组合 | 从n个元素中选m个组合 | `list(itertools.combinations([1,2,3,4], 2))` |
五、常见应用场景
| 场景 | 适用公式 | 说明 |
| 抽奖号码 | 排列 | 若号码有顺序要求 |
| 抽取小组成员 | 组合 | 若不考虑成员顺序 |
| 密码设置 | 排列 | 若密码位数固定且顺序重要 |
| 抽签决定谁发言 | 组合 | 若只是随机选择人 |
六、注意事项
- 排列与组合的本质区别在于是否关注顺序。
- 在实际应用中,需根据问题的实际情况判断使用哪种方法。
- 当n和m较大时,直接计算阶乘可能导致数值过大,可使用对数或编程语言中的大整数处理功能。
通过上述总结可以看出,排列与组合虽然形式相似,但用途和计算方式有明显差异。掌握它们的基本公式和算法,有助于更高效地解决实际问题。


