Skip to content

Lecture 16:计数

1. 规则回顾

  • 乘法法则: |A1××An|=|A1||An|,用于"且"关系。
  • 双射法则:f:AB 是双射,则 |A|=|B|
  • 加法法则:A1,,An 两两不相交,则 |A1An|=|A1|++|An|,用于"或"关系。
  • 广义乘法法则: 每步选择数量固定(不依赖之前选择的具体内容)时,总数为各步选择数之积。

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

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


2. 除法法则(Division Rule)

定义:f:AB 是全函数,且每个 bB 恰好有 k 个原像,则称 fk 对 1 映射,此时 |B|=|A|/k

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


3. 组合数 (nr)

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

推导:

  1. 先选有序序列:n×(n1)××(nr+1)=n!(nr)! 种。
  2. 每个大小为 r 的子集对应 r! 个有序序列(所有排列)。
  3. 由除法法则,子集数为 n!(nr)!r!
(nr)=n!(nr)!,r!(读作"n 选 r")

例:

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

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


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

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

必须验证:

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

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


4.1 扑克手牌计数基础

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

一手牌 = 5 张牌的子集。总手牌数:(525)

4.2 四条(4 of a Kind)

构造方案: 序列 (R,C),其中 R 是四条的点数,C 是另一张不同点数的牌。手牌由 R,R,R,R,C 确定。

验证双射:

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

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

4.3 四种花色齐全

错误方案: 依次选四种花色各自的点数再选一张多余牌,共 134×48 种——但这不是双射!手牌 6,Q,A,2,J 可由两种方式构造(哪张黑桃算"多余牌"有歧义),实际上是 2 对 1,故答案为 134×48/2

正确方案(避免歧义):

  1. 选有两张牌的花色 S(另三种花色按字母序排为 T1,T2,T3):4 种选法。
  2. S 对应的两个点数 Ra,Rb(132) 种。
  3. T1,T2,T3 各选一个点数:133 种。

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

4.4 至少一对(At Least One Pair)

直接构造的困难:

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

正确做法:补集计数。

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

  1. 选 5 个不同点数的集合 r1<r2<r3<r4<r5(135) 种。
  2. 为每个点数独立选一种花色:45 种。

无对子手牌数 =(135)×45

至少有一对的手牌数 =(525)(135)×4549.3 的全部手牌。