【概述】
集合,是集合论中主要研究对象,是指具有某种特定性质的具体的或抽象的对象汇总而成的集体,其中,构成集合的这些对象则称为该集合的元素。
集合中元素的数目称为集合的基数,集合 A 的基数记作:card(A),当其为有限大时,集合 A 称为有限集,反之则为无限集,简单来说,含有有限个元素的集合叫做有限集,含无限个元素的集合叫做无限集。
一个集合具有三个特性:确定性、互异性、无序性。其中,确定性是指给定一个元素其在集合中是否存在是确定的,互异性是指一个集合中任何两个元素都是不同的,无序性是指一个集合中元素间是无序的。
在 STL 中,利用 set 和 multiset 容器可以快速的解决集合问题,关于 set 与 multiset:点击这里
【集合分类】
1.全集与子集
如果一个集合含有所研究问题中涉及的所有元素,那么就称这个集合为全集,记作:U
设 S、T 是两个集合,如果 S 的所有元素都属于 T,则称 S 是 T 的子集,记为:
显然,对于一个集合自身与空集有:
如果 S 是 T 的一个子集,但在 T 中存在一个元素 x 不属于 S,即:
,则称 S 是 T 的一个真子集
2.空集
空集是特殊的集合,其不包含任何元素,记为:∅
其有 2 个特点:
- 空集是任意一个非空集合的真子集
- 空集是任何一个集合的子集
3.交并集
交集是由属于 A 且属于 B 的相同元素组成的集合,记作:A∩B
并集是由属于集合 A 或属于集合 B 的所有元素所组成的集合,记作:A∪B
5.补集
补集分为相对补集和绝对补集:
- 由属于 A 而不属于 B 的元素组成的集合,称为 B 关于 A 的相对补集,记作:A-B 或 A\B
- A 关于全集合 U 的相对补集称作 A 的绝对补集,记作:A' 或 Cu(A) 或 ~A
6.幂集
对于一个集合 A,其所有子集组成的集合,称为集合 A 的幂集。
性质:有限集 A 的幂集的基数等于 2 的有限集 A 的基数次幂。
7.相等集合
如果两个集合 S 和 T 的元素完全相同,则称 S 与 T 两个集合相等,记为:S=T
有:
【集合运算】
对于两个集合 A、B 存在以下运算:
- 交换律:A∩B=B∩A、A∪B=B∪A
- 结合律:A∪(B∪C)=(A∪B)∪C、A∩(B∩C)=(A∩B)∩C
- 分配对偶律:A∩(B∪C)=(A∩B)∪(A∩C)、A∪(B∩C)=(A∪B)∩(A∪C)
- 对偶律:(A∪B)^C=A^C∩B^C、(A∩B)^C=A^C∪B^C
- 同一律:A∪∅=A、A∩U=A
- 求补律:A∪A'=U、A∩A'=∅
- 对合律:A''=A
- 等幂律:A∪A=A、A∩A=A
- 零一律:A∪U=U、A∩∅=∅
- 吸收律:A∪(A∩B)=A、A∩(A∪B)=A
- 德·摩根律:(A∪B)'=A'∩B'、(A∩B)'=A'∪B'
- 容斥原理:card(A∪B)=card(A)+card(B)-card(A∩B)
card(A∪B∪C)=card(A)+card(B)+card(C)-card(A∩B)-card(B∩C)-card(C∩A)+card(A∩B∩C)
利用 bitset 表示集合时,由于二进制位运算的特点,当两个集合 A、B 逐位进行位运算 A&B、A|B、A^B 时,分别对应两个集合的交集、并集、对称差集
此外,当全为 0 时,表示空集;当全为 1 时,表示全集,即 allBits=(1<<n)-1,那么,对于集合 A 的补集为:allBits^A
关于 bitset:点击这里
【例题】
- Equalize the Remainders(CF-999D)(set+模拟):点击这里
- 找连续数(HDU-5247)(set+打表):点击这里
- 矩阵中不重复的元素(51Nod-1024)(set+暴力):点击这里
- The Brand New Function(CF-224C)(set+暴力):点击这里
- Colorful Graph(CF-246D)(set+暴力):点击这里
- Make a Rectangle(Atcoder-2696)(multiset+优先队列):点击这里