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

【数据结构——并查集】

引入

并查集(Disjoint Set Union,DSU)是一种用于管理元素分组的数据结构。

合并(Union):将两个不相交的集合合并为一个集合。
查找(Find):确定某个元素属于哪个集合,通常通过返回集合的“代表元素”(groupID或父节点)实现。

quickFind 和 quickUnion 是并查集的两种实现方式。

每个元素初始时是一个独立的集合,其groupID是本身下标或父节点指向自己(分别表明各自属于哪个集合)。
如下:
在这里插入图片描述
主要就是对两个数组所存的内容进行操作,特别是代表元素部分。
对代表元素进行操作的方向(思考角度)不同,就会使用不同的解决方案(如选择quickFind还是quickUnion,)

quickFind

每个元素直接指向其所属集合的代表元(根节点),合并操作时需要遍历整个数组更新所有相关元素。

时间复杂度:
查找(Find):O(1),直接访问数组即可确定所属集合。
合并(Union):O(n),需要遍历数组更新所有属于同一集合的元素。

特点:查找速度快,但合并效率低(找快合慢)。

在这里插入图片描述

quickUnion

使用树结构表示集合(看下图只能体现链,后面的内容会讲到路径压缩:通过增大节点的度来提高效率进而体现出树的特点),每个元素指向其父节点,根节点指向自身(下图中未标)。合并时只需将一个树的根指向另一个树的根就能连接两个集合。

时间复杂度:
查找(Find):O(logn)(平均,取决于树高),需要递归或迭代找到根节点。
合并(Union):O(logn),仅需修改根节点的指向。

特点:合并效率高,但查找速度取决于树高。可通过路径压缩等进一步提升性能(之后的内容会讲到)。
在这里插入图片描述
合并的方案有多种,这里仅展示其中一种。

大致思路捋顺之后就开始敲了~

//////////////下集预告//////////////

头文件

功能实现

功能调用

http://www.lryc.cn/news/613400.html

相关文章:

  • 批量获取亚马逊商品SKU商品规格调用流程
  • 哈勃网络计划大规模升级卫星以创建全球蓝牙层
  • 哈希表——指针数组与单向链表的结合
  • [Oracle] FLOOR()函数
  • 2025最新国内服务器可用docker源仓库地址大全(2025年8月更新)
  • 上海一家机器人IPO核心零部件依赖外购, 募投计划频繁修改引疑
  • 【Linux基础知识系列】第八十八篇 - 使用du命令分析文件和目录大小
  • 如何解决用阿里云效流水线持续集成部署Nuxt静态应用时流程卡住,进行不下去的问题
  • 硬盘哨兵pe版本 v25.70.6 中文免费版
  • openGauss3.10企业版单机部署(openEuler20.03 SP3)
  • RP2040下的I2S Slave Out,PIO状态机(四)
  • HMC1119LP4METR ADI亚德诺 高频功率放大器 MMIC集成电路IC
  • 自动化测试篇--BUG篇
  • Android-Kotlin基础(Jetpack④-Room)
  • RepoCoder:仓库级代码补全的迭代检索生成框架解析与应用前沿
  • 前缀和
  • 网卡名eth1、em1 、eno1、ens1 的区别
  • C++ vector 扩容时到底发生了什么?
  • 纯本地AI知识库搭建:DeepSeek-R1+AnythingLLM全流程
  • priority_queue的使用和模拟
  • Kotlin中String的==相等比较符
  • C语言sprintf、strcmp、strcpy、strcat函数详解:字符串操作的核心工具
  • 「日拱一码」045 机器学习-因果发现算法
  • 力扣238:除自身之外数组的乘积
  • LeetCode算法日记 - Day 4: 三数之和、四数之和
  • 力扣300:最长递增子序列
  • 优选算法 力扣 LCR 179. 查找总价格为目标值的两个商品 双指针降低时间复杂度 C++题解 每日一题
  • Cesium粒子系统模拟风场动态效果
  • 【Zephyr】02_从零教你开发芯片级ADC驱动(HAL层篇)
  • 第三章:【springboot】框架介绍MyBatis