风言枫语  
1. 定义:并查集是一种树型的数据结构,用于处理一些不相交集合合并查询问题
2. 两个操作:
(1)合并两个不相交的集合;
       合并的集合间是没有交集的,合并后集合内部元素不重复
(2)查找给定元素所属的集合
 
3. 集合代表:为每个集合选定一个固定的元素,称为代表(根结点),以表示整个集合 
(1)合并两个不相交的集合
         本质:使一个集合的祖先(代表)成为另一个集合的祖先(代表)
(2)查找给定元素的所属的集合
        本质:找到所在集合的代表
 
4. 并查集的链表表示
(1)每一个集合用一个链表表示、
(2)链表的每一个元素代表集合的一个成员
(3)链表的第一个元素作为集合的代表
(4)链表中的元素顺序可以是任意
 
5. 并查集的树型表示
(1)每棵表示一个集合
(2)树中结点代表集合中的元素
(3)树的作为集合的代表
(4)树中指针的指向不唯一
(5)使用一维数组模拟
 
6. 构造树型并查集
 
7.并查集的树型结构的优化
  树型结构的瓶颈:查找和合并操作的核心是查找,找根时间复杂度是O(n),找到根后合并集合的时间复杂度是O(1)
  优化思想:给出元素,尽量减少找根的时间
  优化方法:(1)按秩合并
                               按  树的结点个数 或 树的深度 合并
                               降低查找根的时间复杂度由O(n) 变成 O(lgn)
                     (2) 路径压缩
                              由O(lgn) 变成近似常数
 
优化一、按树的结点个数合并
思想:使结点个数少的树成为结点个数多的树的子树。
集合合并时,如果都是按照结点个数进行合并,那么任意结点的深度均不超过logn  +  1
 
优化二、按树的深度合并
思想:使深度浅的树成为深的树的子树,新生成的树,深度不会增加
集合合并时,如果都是按照树的深度进行合并,那么任意结点的深度均不超过logn  +  1
 
优化三、路径压缩
路径压缩的原因
(1)集合按秩合并时,仍能形成深度为lgn的树
(2)节点找根时,需要遍历一遍所在路径才能找到根
(3)对于一个节点,我们只关心它属于哪个集合(只关心它的根是谁,而不关心他的父亲是谁)
思想:在查找根时,可以直接把路径上的所有元素的父亲变成根,下次查找可以直接找到根
总体上,查找的时间复杂度基本可以认为是常数的

 

posted on 2013-09-11 20:28  风言枫语  阅读(138)  评论(0)    收藏  举报