MathLabs

10 年级

计数原理

计数结果个数的加法原理与乘法原理,是组合数学的基础。

直观直觉:选择与分叉的路径

设想挑选一套服装:先从几种颜色中选一件上衣,再从几种尺码中选一条裤子。把所有可能的搭配画成一棵树——每种上衣颜色是一条主枝,每条主枝下按裤子尺码再分出小枝——那么每一种搭配正好对应树的一片叶子。计数原理让我们不必画出整棵树就能数出叶子的数目:当一项工作被拆成互不重叠的若干种情形时用加法,当一项工作是一串必须依次完成的独立步骤时用乘法。

展示上衣颜色分支再分为裤子尺码分支的树形图。
选择分叉树:先选上衣颜色,再选裤子尺码。从根到每片叶子的一条路径就是一套搭配,叶子数等于上衣颜色数乘以裤子尺码数。

中学加法原理与乘法原理

定义: 加法原理(和原理)

如果一项工作恰好可以用 kk 种互斥的方法之一完成,第 nin_i 种方法有 nin_i 种结果,且没有结果同时属于两种方法,那么结果总数为 n1+n2+⋯+nkn_1+n_2+\cdots+n_k。

∣A1∪A2∪⋯∪Ak∣=∣A1∣+∣A2∣+⋯+∣Ak∣|A_1 \cup A_2 \cup \cdots \cup A_k| = |A_1| + |A_2| + \cdots + |A_k|

这里 A1A_1、A2A_2、…\dots、AkA_k 是两两不相交的结果集合:每个结果恰好属于其中一个,所以把所有结果各数一次,就等同于分别数每个集合再相加。

N=n1⋅n2⋯nkN = n_1 \cdot n_2 \cdots n_k

如果一项工作由 kk 个相继的独立步骤组成,第 nin_i 步无论之前如何选择都有 nin_i 种做法,那么完成整项工作的方法总数就是乘积 N=n1⋅n2⋯nkN = n_1 \cdot n_2 \cdots n_k。

何时相加,何时相乘
法则适用场合公式
加法原理工作恰好由 kk 种互斥情形之一完成n1+n2+⋯+nkn_1+n_2+\cdots+n_k
乘法原理工作是一串 kk 个独立步骤,全部都必须完成n1⋅n2⋯nkn_1 \cdot n_2 \cdots n_k

大学严格表述与证明

设 A1A_1、A2A_2、…\dots、AkA_k 是两两不相交的有限集合,即当 i≠ji \neq j 时 Ai∩Aj=∅A_i \cap A_j = \emptyset。那么 ∣A1∪A2∪⋯∪Ak∣=∣A1∣+∣A2∣+⋯+∣Ak∣|A_1 \cup A_2 \cup \cdots \cup A_k| = |A_1| + |A_2| + \cdots + |A_k|。

为什么成立?

这正是把每种互不重叠的情形分别计数再相加这一日常做法的严格表述:之所以成立,正是因为不相交保证了没有结果会被重复计数。

证明

第一步(基础情形 k=2k=2):设 A1A_1 与 A2A_2 不相交,即 A1∩A2=∅A_1 \cap A_2 = \emptyset。A1∪A2A_1 \cup A_2 中的每个元素要么属于 A1A_1,要么属于 A2A_2,不相交排除了同时属于两者的可能。将 A1∪A2A_1 \cup A_2 拆成两个不相交的部分 A1A_1 与 A2A_2,各数一次即得 ∣A1∪A2∣=∣A1∣+∣A2∣|A_1 \cup A_2| = |A_1| + |A_2|。

第二步(对 kk 归纳):假设公式对任意 k−1k-1 个两两不相交的集合已经成立,即 ∣A1∪⋯∪Ak−1∣=∣A1∣+⋯+∣Ak−1∣|A_1 \cup \cdots \cup A_{k-1}| = |A_1| + \cdots + |A_{k-1}|。令 B=A1∪⋯∪Ak−1B = A_1 \cup \cdots \cup A_{k-1}。由于 AkA_k 与所有满足 i<ki < k 的 AiA_i 不相交,它也与它们的并集 BB 不相交。对 BB 与 AkA_k 应用基础情形,得到 ∣B∪Ak∣=∣B∣+∣Ak∣|B \cup A_k| = |B| + |A_k|。

第三步(合并):把归纳假设中的 ∣B∣|B| 代入上式,得到 ∣A1∪⋯∪Ak∣=∣A1∣+⋯+∣Ak−1∣+∣Ak∣|A_1 \cup \cdots \cup A_k| = |A_1| + \cdots + |A_{k-1}| + |A_k|,这正是 kk 个集合的加法原理。由于基础情形 k=2k=2 成立,且从 k−1k-1 到 kk 的每一步都保持公式成立,由归纳法可知该公式对所有 k≥2k \geq 2 都成立。

设一项工作由 kk 个相继的步骤 T1,T2,…,TkT_1, T_2, \dots, T_k 组成,其中第 nin_i 步无论之前的步骤如何选择,都可以用 nin_i 种方式完成。那么完成整个步骤序列的方法数为 N=n1⋅n2⋯nkN = n_1 \cdot n_2 \cdots n_k。

为什么成立?

由于每一步的选择数不依赖于前面的步骤,所以每一种选择组合都是一个不同的合法结果,组合的数目恰好像数矩形网格中的格子那样相乘。

证明

第一步(基础情形 k=1k=1):只有一个步骤时显然有 N1=n1N_1 = n_1 种方法,与 k=1k=1 时的公式一致。

第二步(基础情形 k=2k=2):对完成第1步的 n1n_1 种方法中的每一种,第2步仍然有 n2n_2 种做法,因为它的数目不依赖于第1步的结果。这样,所有选择对被分成 n1n_1 个不相交的组,每组大小为 n2n_2(每种第1步结果对应一组),于是加法原理给出总数为 n2n_2 自加 n1n_1 次,即 N2=n1⋅n2N_2 = n_1 \cdot n_2。

第三步(对 kk 归纳):假设公式对 k−1k-1 个步骤成立,即前 k−1k-1 个步骤合起来共有 Nk−1N_{k-1} 种结果。把这 k−1k-1 个步骤看成一个结果数为 Nk−1N_{k-1} 的“合成步骤”,把第 kk 步看成第二个独立步骤,结果数为 nkn_k(其数目仍不依赖于之前的选择)。对这两步应用两步的基础情形,得到 Nk=Nk−1⋅nkN_k = N_{k-1} \cdot n_k,即 Nk=n1⋅n2⋯nkN_k = n_1 \cdot n_2 \cdots n_k。由归纳法,该公式对所有 kk 都成立。

大学实际应用与典型例题

每当计算机科学家估计有多少种密码、IP 地址或测试用例,每当密码学家计算密钥空间的大小,或每当统计学家在赋予概率之前先数样本空间的大小时,计数原理都是最先用到的工具。下面两个例子把乘法原理直接应用于车牌号码和密码。

例题: 数车牌号码

某车牌格式为:2 个大写字母(A–Z)后跟 5 位数字(0–9),字母和数字都允许重复。共有多少种不同的车牌?

解答

第一步:把车牌分成 7 个独立的位置:2 个字母位和 5 个数字位,依次填入。

第二步:每个字母位有 2626 种选择(允许重复),由乘法原理,两个字母位共给出 26⋅26=26226 \cdot 26 = 26^2 种结果。

第三步:每个数字位与其他位置无关,各有 1010 种选择,五个数字位共给出 10510^5 种结果。

第四步:由于全部 7 个位置都是依次独立填入的,对整个车牌再应用一次乘法原理:车牌总数 =262⋅105=67,600,000= 26^2 \cdot 10^5 = 67{,}600{,}000

例题: 数混合字符集的密码数

某网站要求密码恰好为 4 个字符,每个字符可以是小写字母(26 种)或数字(10 种),允许重复。共有多少种不同的密码?

解答

第一步:对单个字符,先用加法原理,因为该字符要么是字母要么是数字,二者不能同时成立:每个字符的选择数为 26+10=3626 + 10 = 36。

第二步:每个字符的选择数不依赖于其他位置选了什么字符,所以这 4 个位置在乘法原理的意义下是独立的相继步骤。

第三步:对 4 个位置应用乘法原理,得到密码总数为 36436^4。

第四步:计算得 364=1,679,61636^4 = 1{,}679{,}616 种不同的密码。

某班有 15 名男生和 12 名女生。若任何一名学生都可以当选,选出一名代表共有多少种方法?

某套餐可从 3 种汤中选 1 种,并独立地从 4 种主菜中选 1 种;顾客必须恰好选一种汤和一种主菜。共有多少种不同的餐食组合?

若字母和数字都可以重复,形如 2 个大写字母(A–Z)后跟 3 位数字(0–9)的车牌共有多少种?

某密码必须是 4 个小写字母(每位 26 种选择)或 4 位数字(每位 10 种选择)之一,但同一密码中绝不混用两种类型。共有多少种不同的密码?

参考文献

  1. Richard A. Brualdi (2009). Introductory Combinatorics
  2. Kenneth H. Rosen (2019). Discrete Mathematics and Its Applications