排列组合
一个界面算清排列数 P(n,r)、组合数 C(n,r)、可重复排列、圆排列、错排 D(n)、第一/第二类斯特林数与卡特兰数,每个公式都附含义说明。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
结果
排列数 P(n, k)
20P(n, k) = n! / (n − k)!
从 n 个不同元素里取 k 个排成一列,顺序不同算不同结果。
组合数 C(n, k)
10C(n, k) = n! / (k! · (n − k)!)
从 n 个不同元素里取 k 个组成一组,只关心选了谁、不关心顺序。
可重复排列 n^k
25n^k
从 n 种元素里取 k 次,每次都可以重复选,顺序有意义(可重排列)。
可重复组合 C(n + k − 1, k)
15C(n + k − 1, k)
从 n 种元素里可重复地取 k 个,只看每种取了多少个,不看顺序。
圆排列 (n − 1)!
24(n − 1)!
n 个不同元素围成一圈:旋转后重合的排法视为同一种,所以固定一个人再排其余。
错排 D(n)
44D(n) = (n − 1) · (D(n − 1) + D(n − 2))
n 个元素的全排列中,每个元素都不在自己原来位置上的排法数(装错信封问题)。
第一类斯特林数 c(n, k)
50c(n, k) = c(n − 1, k − 1) + (n − 1) · c(n − 1, k)
把 n 个不同元素排成 k 个非空循环排列(轮换)的方案数,也是上升阶乘展开式的系数。
第二类斯特林数 S(n, k)
15S(n, k) = S(n − 1, k − 1) + k · S(n − 1, k)
把 n 个不同元素划分成 k 个非空子集(集合不分顺序)的方案数。
卡特兰数 Cₙ
42Cₙ = C(2n, n) / (n + 1)
长度为 2n 的合法括号序列数,也是 n 个结点的不同二叉搜索树数量。
这个工具能做什么
- 概率与统计作业:一次拿到 P(n,k)、C(n,k)、可重复排列等所有常见计数公式的结果,避免公式记混。
- 排列组合应用题:错排、圆排列、分组问题分别对应 D(n)、(n−1)! 与第二类斯特林数,选对公式比算得快更重要。
- 竞赛与算法入门:卡特兰数出现在括号匹配、二叉树计数、出栈序列等经典题目里,这里可以直接核对前几项。
- 教学演示:每个公式都带一句含义说明,适合讲「为什么这里用组合而不是排列」。
示例
输入
n = 5,k = 2
输出
P(5, 2) = 20,C(5, 2) = 10,5^2 = 25,C(6, 2) = 15,圆排列 4! = 24,错排 D(5) = 44,c(5, 2) = 50,S(5, 2) = 15,卡特兰数 C₅ = 42
k 大于 n 时排列数与组合数按惯例显示 0,斯特林数在 k > n 时显示「—」。
常见问题
排列和组合到底怎么区分?
看顺序是否重要:排队、密码、名次用排列 P(n,k);选人、抽奖、分组用组合 C(n,k)。两者只差一个 k!,P(n,k) = C(n,k) × k!。
错排为什么不是 n! 减去一点?
错排要求「一个都不在原位」,用容斥原理得到 D(n) = n!·Σ(−1)^i/i!,递推形式是 D(n) = (n−1)(D(n−1)+D(n−2))。D(n)/n! 很快趋近 1/e ≈ 0.3679,所以随机洗牌后大约 37% 的概率没人回到原位。
两类斯特林数有什么不同?
第一类 c(n,k) 数的是「把 n 个元素排成 k 个轮换」的方案数,属于排列问题;第二类 S(n,k) 数的是「把 n 个元素分成 k 个非空子集」的方案数,属于分组问题,子集之间不分顺序。
卡特兰数在哪些题里出现?
凡是「每一步都不能越界」的计数都常见:n 对括号的合法序列、n 个结点的二叉搜索树、n 个元素的出栈序列、凸多边形三角剖分,都是 Cₙ = C(2n,n)/(n+1)。
数值上限是多少?
阶乘类公式的 n 上限为 1000,斯特林数因为用动态规划,n 上限为 200。超过上限的公式会显示「—」而不是报错,其他公式仍然照常计算。
关键词:permutationcombinationderangementstirling numberscatalan numbercircular permutation排列组合错排斯特林数卡特兰数圆排列