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

【数据结构——并查集】

引入

并查集(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.xdnf.cn/news/17139.html

相关文章:

  • Renesas Electronics RZ/V2N 评估套件
  • Renesas Electronics RA8M1语音套件(VK-RA8M1)
  • Linux系统之Dockerfile模块
  • 基于rust的RGBA颜色混合
  • Qt: WA_DontCreateNativeAncestors
  • 【音视频】WebRTC C++ native 编译
  • B-树与B+树
  • 行业应用案例:MCP在不同垂直领域的落地实践
  • Java 中 Object 类的解析:知识点与注意事项
  • PPT漏斗图,让数据更美观!
  • 表驱动法-灵活编程范式
  • P4568 [JLOI2011] 飞行路线
  • 全面解析 URL 重定向原理:从协议、实现到安全实践
  • Plant Biotechnol J(IF=10.5)|DAP-seq助力揭示葡萄白粉病抗性机制
  • 普通冷库如何升级物联网冷库?工业智能网关赋能冷链智能化转型
  • C 语言主控开发与显控开发能力体系及技术栈详解,STM32、QT、嵌入式、边缘系统显示
  • LINUX-文件查看技巧,重定向以及内容追加,man及echo的使用
  • Next.js 15 重磅发布:React 19 集成 + 性能革命,开发者必看新特性指南
  • Dokcer创建中间件环境
  • PHP MySQL Delete 操作详解
  • JSON、JSONObject、JSONArray详细介绍及其应用方式
  • TypeScript 元组类型精简知识点
  • mysql死锁的常用解决办法
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • 应急响应知识总结
  • centos KVM
  • git 清理submodule
  • Webpack核心技能:Webpack安装配置与模块化
  • 【YOLOv8改进 - C2f融合】C2f融合DBlock(Decoder Block):解码器块,去模糊和提升图像清晰度
  • C语言中的进程、线程与进程间通信详解