集合
本章主线:集合与元素 → 集合运算 → 幂集 → 笛卡尔积 → 算法中的集合表示。
1 集合与元素
集合是由若干确定对象组成的整体,其中的对象称为集合的元素。
若元素 x 属于集合 A,记作 x∈A;若 x 不属于集合 A,记作 x∈/A。
例如,设 A={1,2,3},则 1∈A,而 4∈/A。
集合中的元素具有三个基本特点:
- 元素是否属于集合必须是确定的;
- 元素没有先后顺序;
- 同一元素重复书写不会重复计数。
因此,{1,2,3}={3,2,1},且 {1,1,2,3}={1,2,3}。
集合与序列不同。序列通常关心元素顺序,而集合只关心包含哪些元素。
2 集合的表示方法
2.1 列举法
直接列出集合中的全部元素。
例如,A={1,3,5,7,9}。
列举法适合元素数量较少的有限集合。
2.2 描述法
通过元素满足的条件表示集合。
例如,所有偶整数可以写成 A={x∈Z∣2∣x}。
描述法的一般形式为
{讨论范围中的元素∣元素满足的条件}.
例如,B={x∈Z∣1≤x≤10} 表示从 1 到 10 的全部整数。
描述法中应同时注意:
3 常见数集
常见数集包括:
- N:自然数集;
- Z:整数集;
- Q:有理数集;
- R:实数集。
它们满足 N⊆Z⊆Q⊆R。
不同教材对 0∈N 可能有不同约定,使用时应先确认定义。
4 集合相等
集合 A 与集合 B 相等,当且仅当它们包含完全相同的元素。
形式化地,
A=B⟺∀x, x∈A⟺x∈B.
证明两个集合相等时,通常分别证明:
- 任取 x∈A,能够推出 x∈B;
- 任取 x∈B,能够推出 x∈A。
这种方法也称为双向包含法。
5 子集
若集合 A 中的每个元素都属于集合 B,则称 A 是 B 的子集,记作 A⊆B。
其定义为
A⊆B⟺∀x, x∈A⟹x∈B.
例如,若 A={1,2},B={1,2,3},则 A⊆B。
每个集合都是自身的子集,因此 A⊆A。
若 A⊆B 且 A=B,则称 A 是 B 的真子集,记作 A⊊B。
6 区分属于与包含
x∈A 表示元素 x 属于集合 A。
A⊆B 表示集合 A 是集合 B 的子集。
例如,设 A={1,2,3},则 1∈A,而 {1,2}⊆A。
再设 B={1,{1,2},3},则 {1,2}∈B,因为集合 {1,2} 本身是 B 的一个元素。
但 {1,2}⊈B,因为虽然 1∈B,却有 2∈/B。
因此,∈ 描述元素与集合之间的关系,⊆ 描述集合与集合之间的关系。
7 空集
不含任何元素的集合称为空集,记作 ∅ 或 {}。
空集的元素数量为 ∣∅∣=0。
集合 {∅} 含有一个元素,这个元素恰好是空集,因此 ∣{∅}∣=1。
空集是任意集合的子集,即 ∅⊆A。
这是因为不存在元素 x 满足 x∈∅ 且 x∈/A。
8 全集
在一个具体问题中,所有允许讨论的对象组成的集合称为全集,常记作 U。
例如,若 U={1,2,3,4,5,6},则之后讨论的集合都默认是 U 的子集。
在算法中,全集可以是:
- 所有顶点;
- 所有边;
- 所有下标;
- 所有合法状态;
- 所有可能取值。
全集取决于当前问题的讨论范围。
9 集合运算
9.1 并集
集合 A 与集合 B 的并集由至少属于其中一个集合的元素组成,记作 A∪B。
定义为 x∈A∪B⟺x∈A∨x∈B。
例如,若 A={1,2,3},B={3,4,5},则 A∪B={1,2,3,4,5}。
这里的“或”是包含性的“或”,允许元素同时属于 A 和 B。
9.2 交集
集合 A 与集合 B 的交集由同时属于两个集合的元素组成,记作 A∩B。
定义为 x∈A∩B⟺x∈A∧x∈B。
例如,若 A={1,2,3},B={3,4,5},则 A∩B={3}。
若 A∩B=∅,则称 A 与 B 不相交。
9.3 差集
集合 A 与集合 B 的差集由属于 A 但不属于 B 的元素组成,记作 A∖B。
定义为 x∈A∖B⟺x∈A∧x∈/B。
例如,若 A={1,2,3,4,5},B={2,4,6},则 A∖B={1,3,5}。
差集通常不满足交换律,即一般有 A∖B=B∖A。
9.4 补集
设全集为 U,且 A⊆U。
集合 A 的补集由全集中不属于 A 的元素组成,记作 A∁ 或 A。
其定义为 A∁=U∖A。
例如,若 U={1,2,3,4,5,6},A={2,4,6},则 A∁={1,3,5}。
补集依赖于全集。
10 用元素法证明集合恒等式
证明两个集合相等时,可以任取元素 x,把集合关系逐步转化为逻辑条件。
例如证明
A∩(B∪C)=(A∩B)∪(A∩C).
从左侧出发,x∈A∩(B∪C) 等价于 x∈A 且 x∈B∪C。
继续展开,得到 x∈A 且“x∈B 或 x∈C”。
这又等价于“x∈A 且 x∈B”,或“x∈A 且 x∈C”。
因此,x∈(A∩B)∪(A∩C)。
反方向同理,所以两个集合相等。
11 基本运算律
11.1 交换律
A∪B=B∪A。
A∩B=B∩A。
11.2 结合律
(A∪B)∪C=A∪(B∪C)。
(A∩B)∩C=A∩(B∩C)。
11.3 分配律
A∩(B∪C)=(A∩B)∪(A∩C)。
A∪(B∩C)=(A∪B)∩(A∪C)。
11.4 幂等律
A∪A=A。
A∩A=A。
11.5 吸收律
A∪(A∩B)=A。
A∩(A∪B)=A。
11.6 与空集、全集的运算
A∪∅=A。
A∩∅=∅。
A∪U=U。
A∩U=A。
12 德摩根律
集合补集满足
(A∪B)∁=A∁∩B∁,
(A∩B)∁=A∁∪B∁.
例如,x∈(A∪B)∁ 表示 x∈/A∪B。
这等价于 x∈/A 且 x∈/B,也就是 x∈A∁∩B∁。
13 集合的大小
有限集合 A 的元素数量记作 ∣A∣。
例如,若 A={1,2,3},则 ∣A∣=3。
若 A,B 为有限集合,则
∣A∪B∣=∣A∣+∣B∣−∣A∩B∣.
原因是 A∩B 中的元素在 ∣A∣+∣B∣ 中被重复计算了一次。
例如,若 A={1,2,3},B={3,4,5},则 ∣A∪B∣=3+3−1=5。
14 幂集
集合 A 的所有子集组成的集合称为 A 的幂集,记作 P(A)。
例如,若 A={1,2},则
P(A)={∅,{1},{2},{1,2}}.
若 ∣A∣=n,则每个元素都有“选”或“不选”两种状态,因此 ∣P(A)∣=2n。
幂集对应算法中的子集枚举与状态压缩。
15 笛卡尔积
设有两个集合 A,B。
从 A 中选一个元素作为第一项,从 B 中选一个元素作为第二项,得到有序对 (a,b)。
所有这样的有序对组成 A 与 B 的笛卡尔积:
A×B={(a,b)∣a∈A, b∈B}.
例如,若 A={1,2},B={a,b},则
A×B={(1,a),(1,b),(2,a),(2,b)}.
若 A,B 为有限集合,则 ∣A×B∣=∣A∣⋅∣B∣。
通常有 A×B=B×A,因为有序对的顺序有意义。
笛卡尔积是后续定义关系与映射的基础。
16 集合与算法
16.1 访问状态
搜索过程中,可以定义已访问顶点集合:
Vvis={v∈V∣v 已访问}.
16.2 连通分量
一个连通分量本质上是顶点集合 C⊆V。
并查集维护的是顶点集合 V 的动态划分。
16.3 子集枚举
若全集含有 n 个元素,则共有 2n 个子集。
状态压缩常用一个 n 位二进制数表示一个子集。
16.4 集合运算与位运算
在状态压缩中:
- 并集对应按位或;
- 交集对应按位与;
- 对称差对应按位异或;
- 补集对应按位取反后限制在全集范围内。
18 与后续内容的联系
- 笛卡尔积是定义 关系 的基础;
- 关系满足额外的存在性与唯一性条件后,就得到 映射;
- 集合运算与逻辑运算之间的对应,会在 命题逻辑与证明方法 中继续出现;
- 幂集与子集枚举连接状态压缩,但具体算法实现仍应放在算法知识库中。
19 本章思考题
-
说明为什么 {1,2,3}={3,2,1,1}。
-
设 A={1,{1}},判断下列命题:
- 1∈A;
- {1}∈A;
- {1}⊆A;
- ∅⊆A。
-
设 A={1,2,3,4},B={3,4,5,6},求 A∪B、A∩B、A∖B 与 B∖A。
-
用元素法证明 A∖(B∪C)=(A∖B)∩(A∖C)。
-
写出集合 A={1,2,3} 的幂集。
-
若 ∣A∣=4,求 ∣P(A)∣。
-
设 A={1,2},B={a,b,c},写出 A×B,并计算其元素数量。
-
思考并查集为什么维护的不是一个集合,而是一个集合划分。