Lec 15 关系与计数原理
资料依据:课程视频与 transcript · Lecture notes
TL;DR
- 二元关系是笛卡尔积的子集;函数是对每个输入恰好指定一个输出的特殊关系,单射与满射分别控制碰撞和覆盖。
- 等价关系由自反、对称与传递性刻画,并把集合分割成不相交的等价类;偏序则用反对称性表示可比的先后或包含关系。
- 双射法、加法法则和乘法法则通过构造或分解对象集计数;使用时要检查分类是否重叠及每步选择数是否恒定。
1. 关系(Relations)
定义: 一个关系 R⊆A×B 由以下部分构成:
- 定义域 A(任意集合)
- 陪域 B(任意集合)
- 有序对的子集 R⊆A×B
记法:(a,b)∈R 也可写作 a,R,b,或将 R 视为谓词写作 R(a,b)。方向很重要:a 关联到 b 不代表 b 关联到 a。
关系可视为有向图:a→b 当且仅当 (a,b)∈R。
函数与全函数
定义: 若每个 a∈A 至多关联到一个 b∈B,则称 R 为函数,记作 R:A→B。(每个 a 至多一条出边。)
定义: 若每个 a∈A 至少关联到一个 b∈B,则称 R 为全关系(Total)。(每个 a 至少一条出边。)
全函数 = 恰好每个 a∈A 有唯一一条出边,即 f(a) 对所有输入都有定义且唯一。
注意:f(x)=1/x2 作为 R→R 的函数不是全函数(f(0) 无定义),但作为 R∖0→R 的函数是全函数。定义域和陪域不同,性质也不同。
单射与满射
定义:
- 单射(Injective):每个 b∈B 至多有一个 a 与之关联。(每个 b 至多一条入边。)
- 满射(Surjective):每个 b∈B 至少有一个 a 与之关联。(每个 b 至少一条入边。)
定理: 若 A,B 是有限集,R⊆A×B 是全单射,则 ∣A∣≤∣B∣。
定理: 若 A,B 是有限集,R⊆A×B 是满射函数,则 ∣A∣≥∣B∣。
定义: 双射(Bijection) = 既单射又满射的全函数。
定理: 若 A,B 是有限集且存在双射 R:A→B,则 ∣A∣=∣B∣。
2. 单集合上的关系
当 A=B 时,R⊆A×A 称为集合 A 上的二元关系,等价于一个有向图。
常见例子:a=b、a≡b(mod10)、a≤b、A⊆B、a∣b。
有向图 G 的可达性关系 G∗:a,G∗,b 当且仅当存在从 a 到 b 的游走。
强连通关系 S:a,S,b 当且仅当 a,G∗,b 且 b,G∗,a。
2.1 等价关系
动机: 捕捉"相同"或"等价"的含义,如模运算中的同余、图中属于同一连通分量。
定义: 设 R⊆A×A:
- 自反性(Reflexive):对所有 a∈A,a,R,a。
- 对称性(Symmetric):a,R,b⇔b,R,a。
- 传递性(Transitive):a,R,b 且 b,R,c ⇒ a,R,c。
若 R 同时满足自反性、对称性、传递性,则称 R 为等价关系。
定理: 等价关系将 A 划分为若干等价类,每个 a∈A 恰属于一个等价类;a,R,b 成立当且仅当 a 与 b 属于同一等价类。
2.2 弱偏序(Weak Partial Order,WPO)
动机: 捕捉"≤"的含义,如 A⊆B、a∣b、DAG 中的可达关系。
保留自反性和传递性,将对称性替换为:
定义:
- 反对称性(Antisymmetric):若 a,R,b 且 b,R,a,则 a=b。
若 R 满足自反性、反对称性、传递性,则称 R 为弱偏序。
定理: 有向图 G 上的可达关系是 WPO,当且仅当 G 是 DAG。
定义: WPO 中,若 a,R,b 或 b,R,a,则称 a 与 b 可比。
若每对元素都可比,则称 WPO 为线序(全序,Total Order)。
- a≤b 是全序;a∣b 和 A⊆B 不是(存在不可比的元素对)。
3. 计数
3.1 核心思路:用双射计数
牧羊人的寓言: 不会数数的牧羊人靠"放一只羊出去就放一颗石子进口袋,收回一只就取出一颗"来确认羊全回来了。这本质上是在羊和石子之间建立双射,从而保证数量相同。
核心原则: 通常通过建立双射来计数。
3.2 乘法法则(Product Rule)
∣A1×⋯×An∣=∣A1∣⋅ ⋯ ⋅∣An∣
例: 长度为 n 的二进制串的数量为 2n,因为该集合就是 0,1n。
3.3 双射法则(Bijection Rule)
若存在双射 A→B,则 ∣A∣=∣B∣。
例: 1,2,…,n 的子集数为 2n。
构造双射:子集 A 映射到 n 位二进制串,第 i 位为 1 当且仅当 i∈A。
3.4 加法法则(Sum Rule)
若 A1,…,An 两两不相交,则 ∣A1∪⋯∪An∣=∣A1∣+⋯+∣An∣。
口诀: 若是"或"关系(从 A1 或 A2 中选),用加法;若是"且"关系(从 A1 且 A2 中选),用乘法。
例(密码计数): 密码长度为 6~8,首字母大写,其余字符为大小写字母或数字(共 62 种)。设 Wk 为长度 k 的合法密码数,由乘法法则有 Wk=26⋅62k−1,故 ∣W∣=W6+W7+W8≈5.7×1015。
3.5 广义乘法法则(Generalized Product Rule)
设 A 是长度为 k 的序列的集合,其中:
- 第 1 个位置有 n1 种选择,
- 无论第 1 步如何选,第 2 个位置有 n2 种选择,
- ……无论前 i−1 步如何选,第 i 个位置有 ni 种选择,
则 ∣A∣=n1⋅n2⋯nk。
关键: 每步的选择数量不依赖之前的选择(具体内容可以变,但数量固定)。
例: 52 张牌的洗牌排列数 = 52×51×⋯×1=52!。
例: 8 位序列号中无重复数字的比例:无重复的数量为 10×9×⋯×3,总数量为 108,比例约为 1.8。
反例(不能用广义乘法法则): 求三位递增序列 abc(各位不同且 a<b<c)的数量。第二位的选择数依赖第一位的值(a=7 时只有 b=8 一种,a=0 时有 8 种),因此不满足广义乘法法则的条件。
我的理解
我的理解
计数问题的难点往往不是算式,而是为每个对象找到恰好一个生成过程。双射证明排除重复和遗漏,因而比“看起来有这么多种选择”更可靠。