数据结构和算法(第 3 章):集合

集合是数据结构中基本的结构,它完全和数学中的集合一致,那下面就来看下数学中的集合到底是什么?

一、集合是什么

集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成集合的这些对象则称为该集合的元素。

举几个例子,如果以人类为一个集合,中国人就是该集合中的一个元素。如果以 0-100 的自然数为一个集合,0 就是该集合中的一个元素,记作 0∈100101 不是该集合中的元素,就记作 0∉100。 更详细的请打开高数(一)第一章仔细看看。

二、集合的特性

集合有下面三个特性:

  • 确定性: 给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。

  • 互异性: 一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。有时需要对同一元素出现多次的情形进行刻画,可以使用多重集,其中的元素允许出现多次。

  • 无序性: 一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。

三、集合的类型

1. 空集

如果一个集合它不包含任何元素,称之为空集,记作

在这里插入图片描述

代码中可表示为一个空数组(为了方便理解,以下所有演示都以 Python 为例讲解)。

In [1]: data = set()                                                                                               

In [2]: data                                                                                                       
Out[2]: set()

2. 子集

如果集合 A 的所有元素都属于集合 B,那么 A 集合就是 B 集合的子集。

在这里插入图片描述

In [3]: data = set({1, 2, 3, 4, 5})                                                                                

In [4]: data                                                                                                       
Out[4]: {1, 2, 3, 4, 5}

In [5]: 1 in data                                                                                                  
Out[5]: True

In [6]: 0 in data                                                                                                  
Out[6]: False

3. 交集

所有属于集合 A 且属于集合 B 的元素组成的集合叫作交集,记作 A∩B

在这里插入图片描述

In [7]: data = set({1, 2, 3, 4, 5})                                                                                

In [8]: s = set({2, 4, 6})                                                                                         

In [9]: data & s                                                                                                   
Out[9]: {2, 4}

4. 并集

所有属于集合 A 或属于集合 B 的元素组成的集合叫作并集,记作 A∪B

在这里插入图片描述

In [10]: data | s                                                                                                   
Out[10]: {1, 2, 3, 4, 5, 6}

5. 差集

所有属于集合 A 且不属于集合 B 的元素组成的集合叫作集合 A 相对于集合 B 的差集,记作 A-B

在这里插入图片描述

In [11]: data - s                                                                                                   
Out[11]: {1, 3, 5}

In [12]: s - data                                                                                                   
Out[12]: {6}

6. 补集

补集一般指绝对补集,如果 AB 的一个子集(子集的概念往上看),B 中所有不属于 A 的元素组成的集合,叫作 AB 中的补集。可以说补集是差集的一个特例。

在这里插入图片描述

AB 的子集,BA 的超集。

In [13]: s1 = set({2, 4})                                                                                           

In [14]: data - s1                                                                                                  
Out[14]: {1, 3, 5}

7. 对称差集

集合 A 与集合 B 中所有不属于 A∩B 的元素的集合叫作对称差集,记作 A△B,即:A△B=(A∪B)-(A∩B)

在这里插入图片描述

In [13]: data ^ s                                                                                                   
Out[13]: {1, 3, 5, 6}

四、集合的算法实现

上面的代码都是用 Python 中已经实现好的集合数据结构,接下来就用我们熟悉的语言将这个集合数据结构用算法实现。

这个真的很简单,我这里就不写了(可能以后不忙的时候会写)。注意的有几点,只用数组为基本数据结构来实现,集合的特性和类型都要全部满足,性能和效率暂时不用考虑,等学完字符串匹配算法和排序算法等等再回来优化。

猜你喜欢

转载自blog.csdn.net/yilovexing/article/details/107335751