并查集可以称之为不相交集合,在处理查找几个元素是否在同一集合时使用并查集可以达到非常快的处理速度,并查集的思想有一点很重要,就是利用树的思想,表示不同的不相交的集合状态,利用根节点作为代表元素,来对整个集合的数据进行处理。
并查集是一种非常精巧而实用的数据结构,主要用于处理一些不相交集合的合并问题,一些常见的用途有求连通子图、最小生成树的karkal算法、和求最近共同祖先等问题。
使用并查集时,首先会初始化一组不相交的动态集合,一般用其数组对应的下标表示集合中的一个元素。每个集合可能包含一个或几个元素,选出其中的某个元素作为代表。
对每个集合中具体包含了那些元素是不关心的,具体选那个元素作为代表也是不关心的,我们关心的是,对于一个元素,可以很快的找到这个元素所在集合的代表,以及合并两个元素所在的集合。
- 并查集的基本操作 :
- init()初始化操作,构建一群根作为自己的森林。
- Getf()查找操作,将getf()函数返回对应集合的根节点的编号。
- Merge()合并操作,将两个元素对应的集合进行合并,如果是同一集合,则不进行操作,否则对两颗树进行合并。
- 然后就是判断根节点是否相同的在操作。
- 最后是记录根节点个数的操作,也就是不同的集合个数。
- 总体思路 :
- 我们把每一个节点所在树的根节点存入f【】数组中。
- 输入两个数查找他们的根节点。
- 对他们所在的根节点进行合并。
- 最后输入要查找的两个节点,找到他们的根节点,判断他们的根节点是否相同。
以上就是我对并查集的理解。