高级数据结构-并查集及实现
并查集是一种简单的用途广泛的集合, 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多。一般采取树形结构来存储并查集,并利用一个rank数组来存储集合的深度下界,在查找操作时进行路径压缩使后续的查找操作加速。并查集是一种可以方便地进行以下三种操作的数据结构:
合并两个集合;
将一元素并入另一集体;
判断两个元素是否属于同一个集合。
例如,可以用数组很方便地实现一个并查集,对一个含有n个元素的并查集,可以用一个长度为n的数组实现,主要设计以下四种操作:
初始化并查集:每个元素赋一不同的值,时间复杂度为O(n)。
合并两个集合A和B:将所有标记为B集合的元素的标记变为A集合的标记,时间复杂度为O(n)。
将一元素a并入集合A:时间复杂度为O(1)。
判断两元素是否属于同一集合:只须比较标记,时间复杂度为O(1)。
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。它支持三种操作:
MakeSet(x): 创建一个只包含一个元素x的并查集。
Find(x, S): 判断x是否在集合S中。
Union(A, B):合并两个并查集A和B 并查集与树可以将每一棵树都看成是元素的集合,从而可以用树来表示并查集。
对于并查集来说,每个集合用一棵树表示。集合中每个元素的元素名分别存放在树的结点中,此外,树的每一个结点还有一个指向其双亲结点的指针。
设 S1= {0, 6, 7, 8 },S2= { 1, 4, 9 },S3= { 2, 3, 5 }
为此,采用树的双亲表示作为集合存储表示。集合元素的编号从0到 n-1。其中 n 是最大元素个数。在双亲表示中,第 i 个数组元素代表包含集合元素 i 的树

