Archipelago

Lec 16计数技巧

讲义完成更新于 2026-09-16

Lec 16 计数技巧

资料依据:课程视频与 transcript · Lecture notes

TL;DR

  • 除法法则适用于每个目标对象都被同样多个表示对象对应的情形;如果重数不一致,就不能直接整体相除。
  • 组合数 (nr)\binom nr 计数从 nn 个不同对象中选出 rr 个的无序子集,由有序选择数除以 r!r! 得到。
  • 复杂扑克牌型等问题需先选择一个不重不漏的分类或构造顺序,再使用乘法、加法或补集计数。

1. 规则回顾

  • 乘法法则: ∣A1×⋯×An∣=∣A1∣⋯∣An∣|A_1 \times \cdots \times A_n| = |A_1| \cdots |A_n|,用于"且"关系。
  • 双射法则: 若 f:A→Bf: A \to B 是双射,则 ∣A∣=∣B∣|A| = |B|。
  • 加法法则: 若 A1,…,AnA_1, \ldots, A_n 两两不相交,则 ∣A1∪⋯∪An∣=∣A1∣+⋯+∣An∣|A_1 \cup \cdots \cup A_n| = |A_1| + \cdots + |A_n|,用于"或"关系。
  • 广义乘法法则: 每步选择数量固定(不依赖之前选择的具体内容)时,总数为各步选择数之积。

广义乘法法则反例: 求三位递增序列的数量时,第二位的选择数依赖第一位,因此不能直接用。

排列: 集合 SS 的一个排列是包含 SS 中每个元素恰好一次的序列。若 ∣S∣=n|S| = n,则共有 n!n! 个排列。


2. 除法法则(Division Rule)

定义: 若 f:A→Bf: A \to B 是全函数,且每个 b∈Bb \in B 恰好有 kk 个原像,则称 ff 是 kk 对 1 映射,此时 ∣B∣=∣A∣/k|B| = |A| / k。

例(圆桌骑士): nn 位骑士围圆桌就座,旋转等价的座位视为相同。设 PP 为所有排列的集合(∣P∣=n!|P| = n!),CC 为所有不同圆形排列的集合。每种圆形排列对应恰好 nn 种线性排列(旋转),故这是 nn 对 1 映射,∣C∣=n!/n=(n−1)!|C| = n!/n = (n-1)!。


3. 组合数 (nr)\binom{n}{r}

问题: 从 nn 个元素中选 rr 个元素的子集,共有多少种方式?

推导:

  1. 先选有序序列:n×(n−1)×⋯×(n−r+1)=n!(n−r)!n \times (n-1) \times \cdots \times (n-r+1) = \frac{n!}{(n-r)!} 种。
  2. 每个大小为 rr 的子集对应 r!r! 个有序序列(所有排列)。
  3. 由除法法则,子集数为 n!(n−r)!⋅r!\frac{n!}{(n-r)! \cdot r!}。

(nr)=n!(n−r)! r!(读作“n 选 r”)\binom{n}{r} = \frac{n!}{(n-r)!\,r!} \quad \text{(读作“$n$ 选 $r$”)}

例:

  • 从 350 人中选 4 名志愿者:(3504)\binom{350}{4} 种。
  • 从 15 种配料中选 3 种披萨配料:(153)\binom{15}{3} 种。
  • 抛 100 枚硬币,恰好 50 正 50 反的序列数:(10050)\binom{100}{50}(约占全部 21002^{100} 种结果的 8%)。

回到递增序列问题: 从 0,1,…,9{0,1,\ldots,9} 中选 3 个数字组成递增序列,等价于选一个大小为 3 的子集(选好后按升序排列即可),答案为 (103)=10!/(3!⋅7!)\binom{10}{3} = 10!/(3!\cdot 7!)。


4. 用序列/方案构造计数

方法论: 将目标对象的构造过程分解为一系列选择步骤,用广义乘法法则计数。

必须验证:

  1. 每组选择都产生集合中的一个对象。
  2. 集合中的每个对象恰好对应一种选择序列(是双射)。

若不是双射而是 kk 对 1,则用除法法则修正。


4.1 扑克手牌计数基础

标准牌组:13 个点数(A, 2, ..., 10, J, Q, K)× 4 种花色 = 52 张牌。

一手牌 = 5 张牌的子集。总手牌数:(525)\binom{52}{5}。

4.2 四条(4 of a Kind)

构造方案: 序列 (R,C)(R, C),其中 RR 是四条的点数,CC 是另一张不同点数的牌。手牌由 R♣,R♡,R♢,R♠,C{R\clubsuit, R\heartsuit, R\diamondsuit, R\spadesuit, C} 确定。

验证双射:

  • 每个 (R,C)(R, C) 都产生一手四条牌?✓
  • 每手四条牌恰好对应一个 (R,C)(R, C)?✓

由广义乘法法则:13×48=62413 \times 48 = 624 种。

4.3 四种花色齐全

错误方案: 依次选四种花色各自的点数再选一张多余牌,共 134×4813^4 \times 48 种——但这不是双射!手牌 6♢,Q♡,A♠,2♣,J♠{6\diamondsuit, Q\heartsuit, A\spadesuit, 2\clubsuit, J\spadesuit} 可由两种方式构造(哪张黑桃算"多余牌"有歧义),实际上是 2 对 1,故答案为 134×48/213^4 \times 48 / 2。

正确方案(避免歧义):

  1. 选有两张牌的花色 SS(另三种花色按字母序排为 T1,T2,T3T_1, T_2, T_3):4 种选法。
  2. 选 SS 对应的两个点数 Ra,Rb{R_a, R_b}:(132)\binom{13}{2} 种。
  3. 为 T1,T2,T3T_1, T_2, T_3 各选一个点数:13313^3 种。

每手牌恰好对应一种构造,是双射,无需再除。

4.4 至少一对(At Least One Pair)

直接构造的困难:

方案"选对子点数 + 选两张花色 + 选其余 3 张"并非双射——多对牌的手牌可以由多种不同顺序构造,且对应的重复次数还不固定(普通对子 2 次、三条 3 次、两对 4 次……),无法用简单的除法法则修正。

正确做法:补集计数。

先计算没有对子的手牌数:

  1. 选 5 个不同点数的集合 r1<r2<r3<r4<r5{r_1 < r_2 < r_3 < r_4 < r_5}:(135)\binom{13}{5} 种。
  2. 为每个点数独立选一种花色:454^5 种。

无对子手牌数 =(135)×45= \binom{13}{5} \times 4^5。

至少有一对的手牌数 =(525)−(135)×45≈49.3= \binom{52}{5} - \binom{13}{5} \times 4^5 \approx 49.3% 的全部手牌。

我的理解

我的理解

“至少一个”往往适合数补集,“恰好一个”往往适合分类,而“先选什么、再选什么”适合乘法。先用自然语言说清每个对象被怎样唯一生成,通常比直接写公式更不容易出错。