zoukankan      html  css  js  c++  java
  • 并查集

    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)对于一个节点,我们只关心它属于哪个集合(只关心它的根是谁,而不关心他的父亲是谁)
    思想:在查找根时,可以直接把路径上的所有元素的父亲变成根,下次查找可以直接找到根
    总体上,查找的时间复杂度基本可以认为是常数的

  • 相关阅读:
    Flink CEP实例及基础应用
    seata 分布式事务
    skywalking 分布式链路追踪
    datax 离线数据同步工具
    rocketmq 消息队列
    Nacos 服务注册
    跨站(cross-site)、跨域(cross-origin)、SameSite与XMLHttpRequest.withCredentials
    读写二进制文件与文本文件
    WPF中通过双击编辑DataGrid中Cell(附源码)
    记一次XML文件读取优化
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3315506.html
Copyright © 2011-2022 走看看