排列组合怎么算?阶乘、组合数与卡特兰数入门

从 10 人里选 3 个和排出前 3 名是两回事。本文讲清阶乘、排列 P(n,k) 与组合 C(n,k) 的区别,以及卡特兰数、贝尔数的用途。

核心要点

  • 阶乘 n! 是 n 个不同元素全排列的方案数;排列 P(n,k) = n!/(n−k)! 要排序,组合 C(n,k) = n!/[k!(n−k)!] 只取不排。
  • 判断用哪个只需问一句:交换两个选中元素的顺序,算不算不同结果——算则排列,不算则组合。
  • 组合数满足对称性 C(n,k) = C(n,n−k) 与杨辉三角递推 C(n,k) = C(n−1,k−1) + C(n−1,k),后者也是二项式展开系数。

「从 10 个人里选 3 个」与「给 10 个人排前 3 名」是两件不同的事:前者不关心顺序,后者关心。这个区别就是组合排列,也是概率、分组与密码学等一系列问题的起点。

阶乘与两个基本公式

阶乘 n! = 1×2×…×n,表示「n 个不同元素全部排成一列」的方案数(阶乘)。在此基础上:排列 P(n,k) = n!/(n−k)! 表示从 n 个里取 k 个并排序;组合 C(n,k) = n!/[k!(n−k)!] 表示只取不排。二者满足 P(n,k) = C(n,k) × k!排列组合可同时算出结果,排列数组合数为单项工具。

怎么快速判断用哪个

问自己一句:交换两个选中元素的顺序,算不算不同结果?算,用排列;不算,用组合。选班长(排列)与选班委(组合)、排队照相(排列)与抽奖(组合)都是典型对照。

组合数的两个常见性质

更高级的计数

卡特兰数 Cₙ = C(2n,n)/(n+1) 计数括号匹配、二叉树形态等;贝尔数计数「把 n 个不同元素划分成若干组」的全部方案;第二类斯特林数则限定分成恰好 k 个非空组。卡特兰数贝尔数第二类斯特林数可直接查询。

提示:n 稍大时 n! 增长极快(20! 已超过 2×10¹⁸),手算容易溢出;涉及取模的场景应改用递推或快速幂,而不是先求阶乘再相除。

常见问题

组合和排列最本质的区别是什么?
是否考虑顺序。排列 P(n,k) 把选出的 k 个元素的不同顺序视为不同方案,组合 C(n,k) 则只关心选了哪些。二者关系是 P(n,k) = C(n,k) × k!。
0 的阶乘为什么等于 1?
这是为了让组合数公式在边界情形下依然成立。0! 等于 1 表示把 0 个元素排成一列只有一种方式,即什么都不做;若规定为 0,则 C(n,0) 与 C(n,n) 都会失去意义。
彩票中奖概率怎么用组合算?
以从 33 个号码中选 6 个为例,总组合数为 C(33,6) = 1,107,568,因此单注中头奖的概率约为 110 万分之一。组合数越大,中奖概率越低。
卡特兰数用在什么地方?
它计数的是具有不越界性质的组合结构,例如 n 对括号的合法匹配方式、n 个节点的二叉搜索树形态数、进出栈的合法序列数。公式为 Cₙ = C(2n,n)/(n+1)。

最后更新:2026-09-19

相关工具

相关指南

‹ 返回知识库