一、什么是并查集
并查集是图论中的一种算法
集就是集合,因此可以看出并查集与集合操作有关
并查集内有两个重要的操作:合并(union),查询(find)
合并操作是用来将不同的集合合并为一个集合,查询操作用来查询某个元素所属的集合
二、举个栗子
1. 栗子
假设现在有六个元素,代号分别为1、2、3、4、5、6
他们的集合关系如下,{1, 2}, {1, 5}, {3, 4}, {6, 2},在同一花括号内表示处在同一集合中
问元素[1, 3],元素[2, 5]是否在同一集合内
思路:根据提供的集合关系,将同一集合内的元素连在一起,每个集合选取一个根节点作为集合的代表,若两个元素所处集合的根节点相同,则表示这两个元素在同一集合内
逐步建立他们的集合关系如下
初始时,每个元素都是一个集合,他们的根节点都是自己,例如:parent[1] = 1
合并元素1和元素2,此时根节点分别为1,2,任意选取元素1作为合并后集合的根节点
将元素5与元素1合并到一个集合中,根节点分别为1,5,任意选取元素5作为合并后集合的根节点
合并元素3和元素4,根节点分别为3,4,任意选取元素3作为合并后集合的根节点
合并元素2和元素6,根节点分别为5,6,任意选取元素6作为合并后集合的根节点
集合关系就建立完毕啦!
这时候开始判断元素所属集合是否相同
[1, 3]
元素1所处集合的根节点是6,元素3所处集合的根节点是3,因此他们属于不同的集合
[2, 5]
元素5所处集合的根节点是6,元素2所处集合的根节点也是6,因此他们在同一集合内
2. 检测环的存在
并查集还可以用来判断是否有环的存在
例如,我们在原有集合的基础上,再添加一条关联关系{1, 6}
元素1所在集合的根节点是6,元素6所在集合的根节点也是6,他们在同一集合中,因此若继续添加关联关系则会导致环