第 1 章 · 组合分析

1.2 计数基本原理

The Basic Principle of Counting
学习目标
  • 准确陈述计数基本原理(乘法原理),并指出其成立的条件;
  • 会用树形图枚举两阶段过程的所有结果,说明叶子数与各层分枝数的关系;
  • 能运用推广到 \(k\) 个阶段的乘法原理解决套餐、委员会、牌照、掷骰等计数问题,正确计算 \(m^n\) 型结果总数;
  • 能辨识"某一阶段的选择数依赖于前面结果"的情形,改用分类相加的方法计数,避免误用乘法原理。

1. 原理的陈述:从一份菜单说起

第 1 章的任务是"数清楚"一个随机试验究竟有多少种可能结果。第 2 章将会看到:在结果等可能的样本空间中,事件的概率恰好等于"有利于该事件的结果数除以结果总数",因此计数是概率计算的第一项基本功。整个组合分析大厦的地基,是一条陈述起来毫不起眼、威力却极其巨大的原理。

例 1 搭配套餐

某餐厅的套餐由前菜、主菜、甜点各一道组成。菜单上前菜有 3 种、主菜有 5 种、甜点有 2 种。问一共可以配出多少种不同的套餐?

把搭配过程分为三个阶段:先选前菜,再选主菜,最后选甜点。第一阶段有 \(3\) 种结果;无论前菜选哪一种,主菜都有 \(5\) 种结果;无论前两步选了什么,甜点都有 \(2\) 种结果。三个阶段的选择数互相独立,故套餐总数为 \[ 3\times 5\times 2 = 30. \] 一份套餐完全由三个选择组成的有序三元组确定,不同三元组对应不同套餐,所以恰好数出 30 种。

例 1 中反复出现的关键句是"无论前面的结果如何"。把它提炼成一般命题,就得到本节的核心定义。

定义 1 计数基本原理(乘法原理)

若某个过程由两个阶段(stage)组成:第一阶段共有 \(n_1\) 种可能结果,并且无论第一阶段的结果是什么,第二阶段都恰有 \(n_2\) 种可能结果,则整个过程共有 \[ n_1 \times n_2 \] 种可能结果。

该原理又称乘法原理(multiplication rule)。直观理解:想象一张 \(n_1\) 行、\(n_2\) 列的表格,第 \(i\) 行第 \(j\) 列的格子对应"第一阶段取第 \(i\) 种结果、第二阶段取第 \(j\) 种结果"的复合结果;由于两个阶段互不干扰,格子恰有 \(n_1 n_2\) 个,且两两不同。本节图 2 的骰子网格正是这张表格的具体化身。

两个阶段显然不够用,所幸原理可以直接推广到任意多个阶段。

定理 1 计数基本原理的推广(\(k\) 个阶段)

设某个过程由 \(k\) 个阶段依次完成。若对每个 \(i=1,2,\ldots,k\),无论前 \(i-1\) 个阶段的结果如何,第 \(i\) 个阶段都恰有 \(n_i\) 种可能结果,则整个过程共有 \[ n_1\, n_2 \cdots n_k \] 种可能结果。

证明对阶段数 \(k\) 作归纳。\(k=2\) 时即定义 1。假设结论对 \(k-1\) 个阶段的过程成立。把前 \(k-1\) 个阶段合并视为一个"复合阶段":由归纳假设,这个复合阶段共有 \(n_1 n_2 \cdots n_{k-1}\) 种结果;并且无论复合阶段的结果如何,第 \(k\) 个阶段都恰有 \(n_k\) 种结果。于是由两阶段的计数基本原理,整个过程共有 \(n_1 n_2 \cdots n_{k-1}\cdot n_k\) 种结果。归纳完成,证毕。

2. 树形图:把原理画出来

树形图(tree diagram)是理解乘法原理最直观的工具:从根出发,第一阶段的每一种选择引出一条枝;每个枝端再按第二阶段的选择继续分枝,如此层层展开,直到最后一层——每一片叶子对应整个过程的一个完整结果,叶子总数就是结果总数。把例 1 的菜单简化(只保留前菜与甜点两个阶段:3 种前菜 × 2 种甜点),图 1 画出了完整的树。

套餐选择的树形图(简化菜单) 第 1 层:前菜 3 种 第 2 层:甜点 2 种 套餐 前菜 A 前菜 B 前菜 C (A, X) (A, Y) (B, X) (B, Y) (C, X) (C, Y) 每条从根到叶的路径 = 一份套餐;叶子总数 = 3 × 2 = 6
图 1:简化菜单(3 种前菜 × 2 种甜点)的树形图。树的分层结构对应过程的分阶段:第 1 层共 3 个分枝,每个枝端再分出 2 个分枝,故叶子共 3 × 2 = 6 片。若把 5 种主菜也画入,只需在叶子前再添一层 5 分枝,叶子数变为 3 × 5 × 2 = 30,正是例 1 的答案。

树形图的价值在于"不重不漏":每片叶子恰对应一条从根出发的路径,数叶子就是数结果。在结果不超过几十个的小型问题中,它可以充当完整的枚举与检验工具;但当阶段数或每阶段的选择数增大时,叶子数按乘积(往往按指数)爆炸——掷 3 颗骰子有 216 片叶子,8 位密码约有 \(62^8\approx 2.2\times 10^{14}\) 片——此时必须放弃逐片数叶子,直接依靠原理本身。

3. 应用:委员会、牌照与骰子

下面三个例子展示乘法原理的典型用法:识别阶段、核实各阶段选择数是否与前面无关、然后连乘。

例 2 两人委员会

某协会由 10 名女性成员与 12 名男性成员组成。现要从女性、男性中各选 1 人组成一个两人委员会,共有多少种可能的组成方式?

第一阶段从 10 名女性中选 1 人,有 \(10\) 种结果;无论选出哪位女性,第二阶段从 12 名男性中选 1 人都有 \(12\) 种结果。由计数基本原理,共有 \[ 10\times 12 = 120 \] 种。注意:两个席位(女性代表、男性代表)已由阶段本身区分开,"选甲乙"与"选乙甲"表示的是同一个委员会,但这并不产生重复——因为我们从未把"先选男性再选女性"数进来。
例 3 牌照编号

某地机动车牌照编号规则为:首位是一个英文字母,后面接 6 个数字(数字允许重复)。按此规则共能编出多少个不同的牌照号码?

编号过程分为 7 个阶段,依次确定 7 个字符。首位字母有 \(26\) 种选择;其后每一位都是数字 \(0\)–\(9\) 中的一个,各 \(10\) 种,且每一位的选择都不受前面已定字符的影响(数字允许重复)。由定理 1,号码总数为 \[ 26\times 10^6 = 26\,000\,000. \] 值得体会的是:这里"允许重复"恰恰保证了各阶段选择数恒为 10,使乘法原理畅通无阻。
例 4 掷三颗骰子

连续掷 3 颗骰子(或同一颗骰子连掷 3 次),把依次得到的点数记录成一个三元组。这样的结果共有多少种?

每一颗骰子都有 6 种结果,且各颗骰子互不影响:无论前两颗掷出什么,第三颗都仍有 6 种结果。由定理 1,结果总数为 \[ 6^3 = 216. \] 更一般地,若某试验单次有 \(m\) 种结果、独立重复 \(n\) 次,则共有 \(m^n\) 种结果:掷 \(n\) 枚硬币为 \(2^n\),掷 \(n\) 颗骰子为 \(6^n\)。当只掷两颗骰子时,图 2 的 6 × 6 网格一一列出了全部 \(6^2=36\) 种结果。
两颗骰子的全部可能结果:6 × 6 = 36 1 2 3 4 5 6 1 2 3 4 5 6 (1,1) (2,1) (3,1) (4,1) (5,1) (6,1) (1,2) (2,2) (3,2) (4,2) (5,2) (6,2) (1,3) (2,3) (3,3) (4,3) (5,3) (6,3) (1,4) (2,4) (3,4) (4,4) (5,4) (6,4) (1,5) (2,5) (3,5) (4,5) (5,5) (6,5) (1,6) (2,6) (3,6) (4,6) (5,6) (6,6) 第一颗骰子的点数 第二颗骰子的点数 对角线上的 6 个结果两颗点数相同;每个格子是一种等可能结果
图 2:两颗骰子全部 6 × 6 = 36 种等可能结果。列标第一颗骰子的点数,行标第二颗骰子——36 个格子与 36 种结果一一对应,正是定义 1 中"n₁ 行 n₂ 列表格"的实例。第 2 章计算"点数之和为 7"等事件的概率时将反复使用这张网格。

形如 \(m^n\) 的计数在本教程中随处可见,下表汇总了最常见的几种,建议熟记。

表 1:常见"独立重复"过程的结果总数
过程每阶段选择数阶段数结果总数数值示例
掷硬币\(2\)\(n\)\(2^n\)\(n=10\):\(1024\)
掷骰子\(6\)\(n\)\(6^n\)\(n=3\):\(216\)
数字编号\(10\)\(n\)\(10^n\)\(n=6\):\(1\,000\,000\)

4. 适用条件:何时不能直接相乘

乘法原理的前提——"无论前面的结果如何,本阶段都恰有 \(n_i\) 种选择"——在使用时必须逐阶段核实。一旦某一阶段的选择数依赖于前面的具体结果,直接相乘就会出错。

考察如下过程:从集合 \(\{1,2,3\}\) 中先取一个数 \(a\),再取一个严格大于 \(a\) 的数 \(b\)。第一阶段确有 3 种结果,但第二阶段的选择数随 \(a\) 而定:\(a=1\) 时有 2 种,\(a=2\) 时有 1 种,\(a=3\) 时有 0 种。正确的做法是按第一阶段的结果分类相加:总数为 \(2+1+0=3\),而不是 \(3\times 2=6\)。

这提示我们处理计数问题的通用策略:先问过程能否分成互相独立的阶段——能,则分步相乘;不能,则先按情形分类,对每一类分别使用乘法原理,再把各类数目相加。"分类相加、分步相乘"这八个字将贯穿整个第 1 章,也是第 3 章全概率公式的计数版雏形。

注记 两个常见误区

误区一:见到"先后两步"就机械相乘。应先检查第二阶段的选择数是否真的与第一阶段无关;若有关,改用分类相加(如上文 \(\{1,2,3\}\) 的例子)。

误区二:以为"不放回"就不能用乘法原理。从 \(n\) 个不同对象中依次不放回地选取时,可选对象确实越来越少,但第 \(i\) 次选取前剩下的对象数目只依赖阶段编号 \(i\)(恰为 \(n-i+1\) 个),而不依赖之前究竟取走了哪些对象——乘法原理依然适用。这正是 1.3 节排列数公式 \(n(n-1)\cdots(n-k+1)\) 的来源。

5. 本节小结

要点回顾
  • 计数基本原理:两阶段各有 \(n_1\)、\(n_2\) 种结果(后者与前者结果无关),则共有 \(n_1 n_2\) 种;\(k\) 个阶段推广为连乘 \(n_1 n_2\cdots n_k\)(定理 1,归纳证明)。
  • 成立条件:每一阶段的选择数必须不依赖于前面的具体结果;否则需按第一阶段的结果分类相加。
  • 树形图:分层对应分阶段,叶子与完整结果一一对应,叶子总数即结果总数;既是枚举工具,也是检验手段。
  • 典型模型:单次 \(m\) 种结果的试验独立重复 \(n\) 次,共 \(m^n\) 种——硬币 \(2^n\)、骰子 \(6^n\)、数字串 \(10^n\)。
  • 本节原理是 1.3 排列、1.4 组合与第 2 章古典概率计算的共同起点。

练习

练习 1-2-1

某系统密码长 8 位,每位字符可以是大写字母、小写字母或数字(共 \(26+26+10=62\) 个字符),允许重复。(a) 共有多少个不同密码?(b) 若规定首位必须是数字,又有多少个?

答案与提示

(a) 8 个阶段、每阶段 62 种且互不影响,共 \(62^8 = 218\,340\,105\,584\,896 \approx 2.18\times 10^{14}\)。(b) 首位仅 10 种,其余 7 位仍各 62 种,共 \(10\times 62^7 = 35\,216\,146\,062\,080 \approx 3.52\times 10^{13}\)。注意"某一位受限"只改变该阶段的选择数,其余阶段照旧连乘。

练习 1-2-2

连续掷 4 枚硬币,每枚的结果记为"正"或"反"。(a) 所有可能的结果序列共有多少种?(b) 连续掷 \(n\) 枚呢?(c) 其中前两枚都是正面的序列有多少种?

答案与提示

(a) 每枚 2 种、互不影响,\(2^4=16\)。(b) 一般地为 \(2^n\)。(c) 前两枚固定为正面(各 1 种),其余 \(n-2\) 枚各 2 种,故 \(1\times 1\times 2^{\,n-2}=2^{\,n-2}\);当 \(n=4\) 时为 4 种。"固定某些位置"等价于把这些阶段的选择数取为 1,乘法原理照常适用。

练习 1-2-3

从集合 \(\{1,2,3,4\}\) 中先后取两个不同的数 \(a\)、\(b\),要求 \(b>a\)。有人算得 \(4\times 3=12\) 种。这个乘法用得对吗?请指出违反了乘法原理的哪个条件,并给出正确答案。

答案与提示

不对。第二阶段的选择数依赖第一阶段的结果:\(a=1\) 时 \(b\) 有 3 种,\(a=2\) 时 2 种,\(a=3\) 时 1 种,\(a=4\) 时 0 种——"无论第一阶段结果如何都恰有 \(n_2\) 种"这一条件被破坏。应分类相加:\(3+2+1+0=6\) 种。(附带一提:这 6 种恰是无序数对 \(\{a,b\}\) 的个数,1.4 节将给出其一般公式 \(\binom{4}{2}\)。)