当前位置: 首页 > news >正文

数据结构|并查集

Hello !朋友们,这是我在学习过程中梳理的笔记,以作以后复习回顾,有时略有潦草,一些话是我用自己的话描述的,可能不够准确,还是感谢大家的阅读!

目录

一、并查集Quickfind

二、两种算法

1)QuickFind[快查找]

思想:

代码框架:

2)QuickUnion[快合并]

思想:

基于size的算法优化:元素少的树,嫁接到元素多的树

基于rank的算法改进:矮的树,嫁接到高的树

路径压缩:所有元素都指向根结点

代码实现步骤:

代码框架:


一、并查集Quickfind

并查集是一种用于处理不相交集合合并查询问题的数据结构。以下是其相关概念:

  • 基本操作
    • 合并(Union):将两个不相交的集合合并为一个集合。
    • 查找(Find):确定一个元素属于哪个集合,通常返回该集合的代表元素。
  • 实现原理
    • 并查集通常使用树结构来实现,每个集合对应一棵树。树中的节点代表集合中的元素,根节点作为集合的代表元素。
    • 用一个数组来存储每个元素的父节点信息,通过不断查找父节点,最终找到根节点,从而确定元素所属的集合。
  • 路径压缩优化:在查找操作中,为了提高效率,可以采用路径压缩的优化方法。即在查找元素的根节点时,将路径上的所有节点直接连接到根节点,这样下次查找时就可以更快地找到根节点。
  • 应用场景
    • 连通性问题:判断图中两个节点是否连通,例如在网络拓扑中,判断两个设备是否通过网络连接。
    • 最小生成树:在构建最小生成树的过程中,用于判断两个顶点是否在同一个连通分量中,避免形成环。
    • 集合划分:将一组元素划分为不同的不相交集合,例如将一群人按照不同的兴趣爱好划分成不同的小组。

二、两种算法

并查集有两种算法,一种是快查找(QuickFind),另一种是快合并(QuickUnion),两种都要实现查找和和合并,只不过使用的不同的方法。

1)QuickFind[快查找]

查找效率:O(1)    合并效率:O(N)

思想:

查找:查找两个数是否在一组,借用索引,看两个数的ID是否相等

合并:合并两个组,将第二个组里所有的值的组号改为第一个组的组号

代码框架:

2)QuickUnion[快合并]

查找效率:O(logN)    合并效率:O(logN)

思想:

查找:查看两个数是否在一组,看两个数根ID是不是同一个,相等则是同一个,不等则不是同一组。

合并:不是合并a,b,而是a的根节点和b的根结点进行合并合并a合并到b,b合并到a都不一定是最好的,所以需要优化算法】(掌握一个就可以)

  • 基于size的算法优化元素少的树,嫁接到元素多的树
  • (目前我是这样理解的,不知道有没有错)
  • 基于rank的算法改进矮的树,嫁接到高的树
  • 路径压缩所有元素都指向根结点
  • 使路径上的所有结点都指向根结点,从而降低树的高度

代码实现步骤:

1、申请空间:根据需要给每个部分都申请出空间

2、初始化:给每个部分赋上初始的值

找索引

找根ID

3、查找:判断两个元素是否在一个集合,返回0,1)判断两个元素的根结点是否相同,则需要找到该借点,然后沿着起父节点找到根结点,最后比较根ID的值。

4、合并:

5、释放空间:

代码框架:

 

http://www.dtcms.com/a/164629.html

相关文章:

  • 一些常用的深度学习可视化平台:TensorBoard、Weights Biases (wandb)、VisualDL
  • 【11408学习记录】考研英语语法核心:倒装句考点全解+真题演练
  • 双剑合璧:融合视觉基础与语言模型,勇闯未知领域的语义分割新框架
  • Unity Audio DSP应用与实现
  • java练习3
  • 内网穿透:Cloudflare连接没有公网电脑的RDP/SMB/SSH-(亲测)
  • 宿主机与虚拟机的通讯以及上网问题解决
  • Windows服务管理
  • DDoS vs CC攻击:哪种对服务器威胁更大?
  • JVM垃圾回收机制-通俗易懂版
  • RPG2.设置角色摄像机
  • Android 系统发展史
  • 写一个 Java 程序,用于将字符串中的指定子串替换为另一个子串
  • 天猫店铺代运营公司推荐与服务内容解析
  • yum 安装 ncurses-devel 报错 baseurl 的解决方法
  • 解读JetBrains ToolBox以及Windows环境AppData的那点事
  • Markdown转WPS office工具pandoc实践笔记
  • 《P3143 [USACO16OPEN] Diamond Collector S》
  • RVO2(C#版)源码分析
  • 文章分享《Nature Communications》|ATAC-seq开启新视角:探索Shox2基因沙漠的神秘功能
  • Java基础学习内容大纲
  • g4f升级到0.5.2.0版本了,但是有些机器无法运行,只能降级到0.5.1.2版本
  • Springboot使用登录拦截器LoginInteceptor来做登录认证
  • Python类的力量:第一篇:数据组织革命——用类替代“临时数据结构”
  • 6.3 数据分析与决策支持:数据洞察生成与决策辅助系统
  • EPSG的作用
  • 【LaTex】3.8流程图绘制
  • 水利三维可视化平台怎么做?快速上手的3步指南
  • AI日报 - 2025年04月30日
  • 【C++游戏引擎开发】第29篇:物理引擎(Bullet)—刚体动力学系统