跳到主要内容
CalcMax

组合数计算器

范围:0 – 1,000

最小值:0

结果

120

组合数(不计顺序)

排列数(计顺序)
720

组合数算的是很多概率问题底下的那个计数:从 n 个东西里取 r 个,一共有多少种取法。取出的顺序不计时,答案是组合数;顺序要计时,答案是排列数——也就是多数人说的 nCr 与 nPr。这一页把两个数一起印出来,因为同一次取法在两种读法下差着一个 r! 的因子,而报数时报错是哪一种,是这类问题最常见的错法。一个开关决定允不允许重复取,它同时改动两行:允许重复时,「从 n 个里取 r 个」是另一个计数,而且 r 可以比 n 大。

公式

组合数 C(n, r) = n! / (r!(n − r)!) · 排列数 P(n, r) = n! / (n − r)! · 允许重复时:C = (n + r − 1)! / (r!(n − 1)!),P = nʳ

n
一共有多少种不同的东西可以取——池子的大小,不是取几个
r
实际取出几个。不允许重复时 r 不能超过 n;允许重复时 r 可以比 n 大,因为同一种东西允许被取到两次以上
allowRepetition
同一种东西能不能被取不止一次。这不是排版偏好,而是换了一套公式;也正是这个开关决定着「r 比 n 大」是合法还是根本做不到
C(n, r)
组合数,也就是 nCr:取出 r 个而不计顺序的取法数,所以 ABC 与 CBA 只算一种
P(n, r)
排列数,也就是 nPr:取出 r 个并排好顺序的取法数,所以 ABC 与 CBA 是两种不同的结果。它恒等于组合数乘以 r!

凡是问题真正在问「有多少种取法」的时候都用得上,而概率靠数数而不是靠公式推的时候,绝大多数都是这种情况。扑克牌的一手牌、彩票的一组号码、从名单里挑人、排座次,都是这一个计算;而在动手算之前必须先定下来的一件事,就是顺序算不算——一手牌是组合,登上领奖台的名次是排列。允许重复那个开关在「同一种选择可以被做两次」的场合才起作用:从几种口味里点三球冰淇淋,顺序仍然不计,但口味可以重复,那是一个允许重复的组合数,不是普通组合数。这一页只算这些计数,不算概率——概率是拿这些计数再往下做一步。

算例

  1. 十个里取三个:组合 120 种,排列 720 种

    1. 不计顺序时,C(10,3) = 10! / (3! × 7!) = (10 × 9 × 8) / (3 × 2 × 1) = 120
    2. 计顺序时,P(10,3) = 10 × 9 × 8 = 720
    3. 两者相差 3! = 6,也就是三个被取出的东西能排出的顺序数
    4. 验算:120 × 6 = 720

    这一对就是这一页存在的理由。同样三个东西,组合只有一种、排列有六种,所以一个不说明是哪种的计数在这里就可能差六倍——取五个时差 120 倍,那时候错误已经大到不像错误了。最后一步那个关系值得记住:排列数恒等于组合数乘以 r 的阶乘,因为每一种「不计顺序的取法」都恰好能被排出 r! 种顺序,不多也不少。

  2. 同样十个取三个,这次允许重复

    1. 允许重复且不计顺序时,C = (10 + 3 − 1)! / (3! × 9!) = C(12,3) = 220
    2. 允许重复且计顺序时,P = 10³ = 1000
    3. 组合数那一支相当于把池子放大了——公式给 n 加上 r − 1——而排列数那一支只是每一格都有 n 种选择
    4. 验算:220 不是 120,1000 也不是 720,拨一下开关两行都动了

    两行都变了,这正是这个开关的意义而不是它的细节。一个只改了组合数那一支的实现会并排印出 220 与 720,两个数看着都挺合理,描述的却是两套不同的规则。还要留意排列数变成了幂而不是下降乘积:允许重复时,r 个位置上每一个都有 n 种选择,所以数出来是 nʳ,而不是每取一个就少一种。

  3. 从 52 张牌里取一手五张

    1. 一手牌不计顺序,所以数是 C(52,5) = 52! / (5! × 47!)
    2. 先把五个下降项乘起来:52 × 51 × 50 × 49 × 48 = 311,875,200
    3. 再除以 5! = 120:311875200 / 120 = 2,598,960
    4. 第二行就是第一行做除法之前的那个中间量——「一手牌是有序发牌数除以排列数」说的正是这件事

    2,598,960 是所有扑克牌概率要除的那个分母,也是这一页被查得最多的一格。这里两行值得对照着看,因为排列数那一行字面上就是除以 5! 之前的分子:五张牌有 311,875,200 种有序发法,而每一手牌都对应其中 120 种。看懂「不计顺序的数是计顺序的数除以排列数」,是分清这两行最快的路子。

  4. 六个里取六个:组合只有 1 种,排列 720 种

    1. 全部取走只有一种取法,所以 C(6,6) = 1
    2. 排列数是六个东西的全部排法:P(6,6) = 6! = 720
    3. 两行之间差 720 = 6!,正是 r = n 时的 r! 关系

    r = n 时两行离得最远,而组合那一行塌成了 1——全都要的时候已经没有「取哪些」这个问题了。拿它与上面那手扑克牌并排看很有用:那里差 120 倍,这里差 720 倍,中间变的只是「每一次取法允许几种排法」。如果你要的其实是排列那一行,这就是这个错误最夸张时的样子。

  5. 三种口味点五球:r 比 n 大

    1. 三种口味取五球、不计顺序、允许重复:C = C(3 + 5 − 1, 5) = C(7,5) = 21
    2. 再把顺序也算上,P = 3⁵ = 243
    3. 两个数都只有在允许重复时才成立——关掉这个开关,从三个里取五个根本做不到,页面会直接拒绝这组输入

    这一格把「这个开关是正确性要求而不是顺手加的选项」说清楚了。从三个东西里取五个,不重复是取不出来的,所以开关关着时这一页拒答;开关打开,同一组输入给出两个再普通不过的数。组合那一行还顺带解释了公式为什么给池子加上 r − 1:允许重复相当于让池子变大,三种口味取五次,等价于七种东西里取五样。

局限

两个计数在某个界限之内都是精确的整数,过了那条线这一页会选择拒答而不是四舍五入。这些数涨得极快——一百个里取五十个有三十位——而计算机用来做运算的浮点数大约在第十六位上下就不再能精确表示每一个整数了,所以那么大的计数会带着一个看起来很正常、末几位却是错的尾巴回来。与其印一个没人能发现它错在哪儿的数,这一页对超出精确范围的计数直接抛出;同一条拒答也覆盖超过一千个的池子和任何负数。另外两条:这一页只做计数——它不列举这些取法,不把它们逐条排出来,也不算「抽中其中一种」的概率(那是这个计数除以总数)。还有,允许重复这个开关只表示「同一种可以被取不止一次」;它不是在模拟「抽牌时牌堆会变薄」这件事——那件事已经由不重复那一套公式里的下降乘积管住了。

常见问题

组合数和排列数有什么区别?
组合数不计取出的顺序,排列数计。从十个人里挑三个组成小组是组合,因为小组 ABC 与小组 CBA 是同一个小组;给这三个人发一二三等奖则是排列,因为奖的归属不同了。两个数从来不会接近:排列数恒等于组合数乘以 r!,也就是被取出的 r 个东西能排出的顺序数。这一页把两行都印出来,就是为了不让这个因子靠猜——取三个时它是 6,取五个时它是 120,差得越远越不容易自己发现。
计算器上的 nCr 是什么意思?
nCr 就是组合数:n 是池子的大小,r 是取几个,结果是「不计顺序地取出它们」的取法数,也就是这一页组合那一行印出来的数。旁边的 nPr 是计顺序的排列数,对应下面那一行。快速分辨一个题目要哪一个,可以问一句:把取出的两个东西换个位置,结果会不会变?不会变,答案就是 nCr。中文里这两个也常写成「组合」与「排列」,说的是同一件事。
打开「允许重复」之后变了什么?
两套公式都变了,合法性也变了。不允许重复时,排列数是一个下降乘积——n × (n − 1) × … ——组合数再把它除以 r!;允许重复时,排列数就是 n 的 r 次方,组合数则换成多重集的计数,n 种东西取 r 个算下来是 C(n + r − 1, r)。真正容易绊住人的是合法性那一条:不允许重复时 r 比 n 大根本做不到,会被直接拒绝;允许重复时它就是一个普通请求,比如三种口味点五球。
为什么有些大的输入这一页不给答案?
因为给出的答案会在末几位上是错的,而且看上去不像错的。这些计数涨得极快——一百个里取五十个大约有三十位——而计算机做运算用的数在第十六位上下就不再能精确表示每一个整数了。过了那条线,结果是「开头看着对、结尾是错的」一个附近的数;如果这个计数还要拿去做概率或者写进报表,那比不给答案更糟。所以对无法精确表示的计数,这一页直接抛出,和它对超过一千个的池子、以及负数取法的处理是同一种做法。
「允许重复」等于「有放回抽取」吗?
不完全等于,扑克牌那套说法里的「有放回」还多一层意思。这个开关只说了「同一种可以被取不止一次」,也就是池子里的选择彼此独立时,有放回抽取得到的结果。而在牌类问题里,牌被抽走之后池子还会变小,那一层已经由不重复那一套公式里的下降乘积管住了——一手五张牌是 C(52,5),不是 52 的 5 次方。所以这个开关管的是「能不能重复取同一个」,池子变小那件事是公式在管,不是开关在管。
为什么计算器下面没有速查表?
因为这样的表与面板必然对不上。这一页想要的表是一张 n 排一边、r 排另一边的方格表,而面板里的答案是从你填的 n 与 r 算出来的,所以固定的一张表会在同样的输入下给出不同的数。本站确实带参考表的那几页,表描述的都是与输入无关的一组固定值——一条分级界线、一套标准刻度——而不是对输入的计算。在这一页,面板上的两行就是答案,它们跟着每一次输入变。

参考资料

相关计算器