MathLabs

10 年级

排列与组合

计数公式 Pn=n!P_n = n!、AnkA_n^k、CnkC_n^k,用于计数有序和无序的选取方式。

直观直觉:顺序是否重要?

取 3 颗彩色珠子排成一行:交换其中两颗会得到一行看起来不同的排列,所以顺序重要——这就是排列。现在把同样的 3 颗珠子放进一个袋子:摇晃袋子不会变成新的袋子,所以顺序不重要——这就是组合。介于这两个极端之间的是选排:只从对象中选出一部分并排序,比如从众多选手中选出 3 人分别授予金、银、铜牌。下面三个计数公式——排列、选排、组合——不过是把乘法原理应用到这三种情形而已。

从 A、B、C 中按计入或不计顺序进行选择的示意图,列出不同结果并显示对应的 P(n,r) 或 C(n,r) 计数。
每一行表示从 nn 个对象中选取 rr 个的一种结果:计入顺序时,换序会成为不同的一行;组合则把所有换序只计一次。切换到不计顺序模式,比较同一个例子。

中学三个计数公式

定义: 排列

nn 个不同对象的一个排列,是把这 nn 个对象全部排成一行的一种方式。排列数记作 PnP_n。

Pn=n!P_n = n!

定义: 选排(部分排列)

从 nn 个不同对象中选出 kk 个(0≤k≤n0 \le k \le n),再把这 kk 个对象按顺序排列的方式称为选排。选排数记作 AnkA_n^k。

Ank=n!(n−k)!A_n^k = \frac{n!}{(n-k)!}

定义: 组合

从 nn 个不同对象中不考虑顺序地选出 kk 个(0≤k≤n0 \le k \le n)——即一个大小为 kk 的子集——称为组合。组合数记作 CnkC_n^k。

Cnk=n!k!(n−k)!C_n^k = \frac{n!}{k!(n-k)!}

每个组合恰好对应 k!k! 个选排(所选子集的每一种排序对应一个),这正是组合公式要用选排数除以 k!k! 的原因。

排列、选排与组合的比较
概念是否考虑顺序?选取数量公式
排列是全部 nn 个Pn=n!P_n = n!
选排是从 nn 个中选 kk 个Ank=n!(n−k)!A_n^k = \frac{n!}{(n-k)!}
组合否从 nn 个中选 kk 个Cnk=n!k!(n−k)!C_n^k = \frac{n!}{k!(n-k)!}

大学严格表述与证明

对整数 n≥1n \ge 1 与 0≤k≤n0 \le k \le n,从 nn 个不同对象中选出 kk 个并按顺序排列的方法数为 Ank=n!(n−k)!A_n^k = \frac{n!}{(n-k)!}。特别地,取 k=nk=n 就得到排列数 Pn=n!P_n = n!。

为什么成立?

依次填入 k 个有序位置,每填一个位置后剩余合格对象数就减少一个,这正是独立相继步骤的乘法原理所描述的情形。

证明

第一步(设置位置):把要填的 kk 个位置依次记为位置1到位置 kk。用 nn 个对象之一填每个位置,且不重复使用已放置的对象,这是一项由 kk 个相继步骤组成的工作。

第二步(应用乘法原理):位置1有 nn 种填法。填完后已用掉一个对象,所以无论位置1选了哪个对象,位置2都有 n−1n-1 种填法。依此类推,位置 kk 有 n−k+1n-k+1 种填法,因为已经用掉了 k−1k-1 个对象。由乘法原理,总数为乘积 n(n−1)⋯(n−k+1)n(n-1)\cdots(n-k+1)。

第三步(改写为阶乘之商):乘以再除以缺失的尾部 (n−k)!(n-k)!,得到 n(n−1)⋯(n−k+1)=n(n−1)⋯(n−k+1)⋅(n−k)!(n−k)!=n!(n−k)!n(n-1)\cdots(n-k+1) = \frac{n(n-1)\cdots(n-k+1)\cdot (n-k)!}{(n-k)!} = \frac{n!}{(n-k)!},这正是 Ank=n!(n−k)!A_n^k = \frac{n!}{(n-k)!}。

第四步(特殊情形 k=nk=n):代入 k=nk=n,利用 0!=10! = 1 得到 Ann=n!0!=n!1=n!A_n^n = \frac{n!}{0!} = \frac{n!}{1} = n!,恢复排列数 Pn=n!P_n = n!。

对整数 n≥1n \ge 1 与 0≤k≤n0 \le k \le n,从 nn 个不同对象中不考虑顺序选出 kk 个的方法数为 Cnk=n!k!(n−k)!C_n^k = \frac{n!}{k!(n-k)!}。

为什么成立?

每个大小为 k 的无序子集恰好能以 k! 种方式变成有序的选排,所以有序计数把每个子集都重复计数了相同的因子 k!;除以 k! 就消除了这种重复计数。

证明

第一步(把选排按其基础子集分组):从 nn 个对象中选 kk 个的每一个选排,都是先选定某个 kk 元子集,再对其排序而得到的。把 AnkA_n^k 个选排按可能的 kk 元子集分成若干组,使得两个选排属于同一组当且仅当它们使用相同的对象集合。

第二步(每组的大小):固定一个 kk 元子集,由它构成的选排恰好对应该子集的各种排序方式,这样的排序方式共有 k!k! 种(kk 个对象的一个排列)。因此每一组恰好有 k!k! 个选排。

第三步(对各组用加法原理):各组两两不相交(一个选排恰好属于一组),按定义共有 CnkC_n^k 组,每组大小为 k!k!。加法原理(k!k! 自加 CnkC_n^k 次)给出 Ank=Cnk⋅k!A_n^k = C_n^k \cdot k!。

第四步(解出组合数):两边除以 k!k! 并代入 Ank=n!(n−k)!A_n^k = \frac{n!}{(n-k)!},得到 Cnk=Ankk!C_n^k = \dfrac{A_n^k}{k!},即 Cnk=n!k!(n−k)!C_n^k = \frac{n!}{k!(n-k)!}。

对满足 1≤k≤n−11 \le k \le n-1 的整数 nn 与 kk,有 Cnk=Cn−1k−1+Cn−1kC_n^k = C_{n-1}^{k-1} + C_{n-1}^k。

为什么成立?

这正是加法原理的又一体现:按是否包含某个固定元素,把所有大小为 k 的子集分成两种互斥情形,数目相加即可。

证明

第一步(固定一个元素,按是否包含分类):在 nn 个对象中固定一个对象 xx。每个 kk 元子集要么包含 xx,要么不包含;这两种情形互斥,且合起来穷尽全部 CnkC_n^k 个子集。

第二步(数包含x的子集):包含 xx 的子集是从其余 n−1n-1 个对象中再选 k−1k-1 个而构成的,这样的子集共有 Cn−1k−1C_{n-1}^{k-1} 个。

第三步(数不包含x的子集):不包含 xx 的子集是从其余 n−1n-1 个对象中选出全部 kk 个而构成的,这样的子集共有 Cn−1kC_{n-1}^k 个。

第四步(应用加法原理):由于这两种情形互斥且穷尽了所有大小为 k 的子集,加法原理给出 Cnk=Cn−1k−1+Cn−1kC_n^k = C_{n-1}^{k-1} + C_{n-1}^k。

大学实际应用与典型例题

排列、选排与组合是计算机科学(数排序算法中可能的排列方式)、密码学(数密钥数)、排班(分配不同的时间段)以及统计学(在计算概率之前先数等可能的样本)中日常用到的运算。下面两个例子分别展示一个排列问题和一个组合问题。

例题: 在书架上摆书

某学生有 5 本不同的教科书,想把它们全部排成一排放在书架上。共有多少种不同的排列方式?

解答

第一步:5 本书全部都要摆放,交换任意两本会得到看起来不同的书架,所以这是对全部 5 个对象的排列,而不仅是部分选取。

第二步:依次填入书架上的 5 个位置:第一个位置有 55 种选择,第二个位置剩 44 种,依此类推直到最后一个位置只剩 11 种,与 n=5n=5 时的排列公式 Pn=n!P_n = n! 相符。

第三步:计算得 5!=5⋅4⋅3⋅2⋅1=1205! = 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 120 种不同的排列方式。

例题: 选一个委员会

从 10 名员工中选出一个 4 人委员会,委员会内部没有不同的职务(所有成员地位平等)。共有多少种不同的委员会?

解答

第一步:由于没有成员担任特殊职务,选出相同 4 人但排列顺序不同的两种选法构成同一个委员会,因此顺序不重要——这需要用组合公式而非选排公式。

第二步:以 n=10n=10 和 k=4k=4 应用 Cnk=n!k!(n−k)!C_n^k = \frac{n!}{k!(n-k)!},得到 C104=10!4!⋅6!C_{10}^4 = \frac{10!}{4! \cdot 6!}。

第三步:化简后,剩下的因子为 10⋅9⋅8⋅74!=504024=210\frac{10 \cdot 9 \cdot 8 \cdot 7}{4!} = \frac{5040}{24} = 210 个不同的委员会。

4 本不同的书排成一排放在书架上,共有多少种不同的排列顺序?

从 8 名候选人中选出主席、副主席和秘书(三个不同的职务,没有人兼任两个职务)。共有多少种不同的结果?

从 9 名志愿者中选出 3 人一组(地位平等,没有不同职务)来负责一项活动。共有多少种不同的分组?

某老师从 20 人的班级中选出 2 名学生组成一对,共同获得一份奖品(没有队长,两人之间没有不同的位置)。哪个公式能数出可能的组合数?

参考文献

  1. Ronald L. Graham, Donald E. Knuth, Oren Patashnik (1994). Concrete Mathematics: A Foundation for Computer Science
  2. Richard A. Brualdi (2009). Introductory Combinatorics