数据结构(5.5_2)——并查集
逻辑结构——数据元素之间的逻辑关系

并查集:
并查集(Union-Find)是一种树型的数据结构,用于处理一些不交集的合并及查询问题。它支持两种操作:
用双亲表示存储并查集
首先将所有根节点数组值设为-1,其他结点数组值对应其父节点的数组下标


查找(Find):
确定某个元素处于哪个子集,它可以用来确定两个元素是否属于同一个子集。

如何“查”到一个元素到底属于哪一个集合?
---从指定元素出发,一路向上,找到根结点---
如何判断两个元素到底是否属于同一个集合?
---分别查到两个元素的根,判断节点是否相同即可---
合并(Union):
将两个子集合并成一个集合。
把两个集合“并“为一个集合
---让一棵树成为另一棵树的子树即可---


树的存储——双亲表示法(回忆)

并查集的代码实现
初始化
先将所有结点数组值设为-1
#define SIZE 13
int UFSetes[SIZE]; //集合元素数组//初始化并查集
void Initial(int S[]) {for (int i = 0; i < SIZE; i++) {S[i] = -1;}
}
并、查

查操作:
//Find "查"操作,找x所属集合(返回x所属根结点)
int Find(int S[], int x) {while (S[x] >= 0)//循环寻找x的根x = S[x];return x;//根的S[]小于0
}
并操作:

//Union "并操作",将两个集合合并为一个
void Union(int S[], int Root1, int Root2) {//要求Root1和Root2是不同的集合if (Root1 == Root2)return;//将根Root2连接到另一根Root1下面S[Root2] = Root1;
}
时间复杂度分析

Union的优化操作
优化思路:在每次Union操作构建树的时候,尽可能让树不长高
- 用根节点的绝对值表示树的结点总数
- Union操作,让小树合并到大树



代码:
//Union "并操作",小树合并到大树
void Union(int S[], int Root1, int Root2) {if (Root1 == Root2)return;if (S[Root2] > S[Root1]) {//Root2结点数更少S[Root1] += S[Root2];//累加结点总数S[Root2] = Root1;//小树合并到大树}else {S[Root2] += S[Root1];//累加结点总数S[Root1] = Root2;//小树合并到大树}
}

总结:

相关文章:
数据结构(5.5_2)——并查集
逻辑结构——数据元素之间的逻辑关系 并查集: 并查集(Union-Find)是一种树型的数据结构,用于处理一些不交集的合并及查询问题。它支持两种操作: 用双亲表示存储并查集 首先将所有根节点数组值设为-1,其…...
Java Web —— 第四天(Maven)
Maven是什么 Maven 的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM) POM (ProjectObject Model): 项目对象模型 Maven的作用 项目构建:提供标准的、跨平台的自动化项目构建方式 依赖管理:方便快捷的管理项目依赖的资源 (ar包)&…...
2024年电脑录屏软件推荐:捕捉屏幕,记录生活,分享精彩
在众多电脑录屏软件中,如何挑选出一款适合自己的工具呢?今天,我们就来为大家对比评测四款热门电脑录屏软件:福昕REC、转转大师录屏、爱拍录屏和轻映录屏。通过对它们的功能、性能、操作便捷性等方面进行对比,帮助你找到…...
oracle 增删改查字段
在Oracle数据库中,对表字段的增删改查是数据库操作的基础。以下是关于Oracle中如何增加、删除、修改和查询字段的详细解释: 1. 增加字段(Add) 增加字段的语法为: ALTER TABLE 表名 ADD (字段名 数据类型 [DEFAULT 默…...
给不规则的shapeGeometry贴图
首先看一下贴图效果,我们要做的是将一个长方形的贴图在不规则的多边形中贴图 实现思路 1. 取不规则多边形的box2,这个box2就是整个贴图的UV坐标 2. 计算每个不规则的多边形顶点的在该box2上的对应映射 3. 更新整个geometry的uvs数据 怎么计算映射&…...
网络层IP协议报头字段的认识
认识IP协议 IP协议(Internet Protocol),又称网际协议,是整个TCP/IP协议栈中的核心协议之一,位于网络层。IP协议是互联网中最基础的网络协议之一,负责在网络中传输数据包。它定义了数据包的格式、地址分配和…...
Linux部署MySQL8.0
目录 一、部署前准备1.1、查看系统版本和位数(32位或64位)1.2、下载对应安装包 二、开始部署1、将安装包解压并且移动到目标安装目录2、准备MySQL数据和日志等存储文件夹3、准备MySQL配置文件 my.cnf4、创建mysql单独用户组和用户,将安装目录…...
二叉树中的深搜
🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 1. 计算布尔二叉树的值 1.1 题目描述 1.2 题解 1.3 代码实现 2. 求根节…...
固态继电器行业知识详解
固态继电器(SSR)是一种通过电子元件来实现开关功能的器件,与传统的电磁继电器相比,它具有更高的可靠性、耐用性和响应速度,广泛应用于工业自动化、家用电器和各种电子控制系统中。本文将详细探讨固态继电器的工作原理、…...
【practise】数组中出现次数超过一半的数字
关于我: 睡觉待开机:个人主页 个人专栏: 《优选算法》《C语言》《CPP》 生活的理想,就是为了理想的生活! 作者留言 PDF版免费提供:倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。…...
RAGFlow v0.9 重磅升级,支持 GraphRAG,开启下一代 RAG 之旅!
一、引言 前面我们介绍过很多的关于大模型和RAG相关的技术,通过其关注程度足以看到市场上对RAG框架和成熟产品的迫切需求,因为想要个人独立从0开始实现一个RAG产品并非易事,虽然有相当多的RAG或者知识库开源产品,大部分其实很难应…...
MySQL的InnoDB的页里面存了些什么
文章目录 创建新表页的信息新增一条数据根据页号找数据信息脚本代码py_innodb_page_info根据地址计算页号根据页号计算起始地址 主要介绍数据页里面有哪些内容,一行数据在文件里面是怎么组织的 创建新表页的信息 CREATE TABLE test8 (id bigint(20) NOT NULL AUTO…...
SQL Server 事务
1. 什么是事务 SQL Server 事务是数据库操作的一个基本特性,它允许你将一系列数据库操作组合成一个原子单元,这个单元中的所有操作要么全部成功,要么全部失败。事务具有以下四个重要的属性,通常被称为ACID属性。 2、事务的特性 原…...
qt quick实现的水波纹特效:横向波纹、纵向波纹效果
qml实现的水波纹特效 1.横向波纹效果2.另一种效果(纵向波纹) 一直以来使用c qt如果要实现一些高级特效比如水波纹效果都难度比较大,但是使用qt quick难度就会小很多。这里借鉴一些网友的思路简单实现一下水波纹效果。主要思路就是波浪的形成是…...
释放数据要素价值,FISCO BCOS 2024 应用案例征集
2024年,国家数据局等17部门联合印发《“数据要素”三年行动计划(2024—2026年)》,《行动计划》指出,发挥数据要素的放大、叠加、倍增作用,构建以数据为关键要素的数字经济,是推动高质量发展的必…...
日撸Java三百行(day18:循环队列)
目录 一、顺序队列与循环队列 二、代码实现 1.循环队列创建 2.循环队列遍历 3.循环队列入队 4.循环队列出队 5.数据测试 6.完整的程序代码 总结 一、顺序队列与循环队列 在昨天,我们提到队列实现除了采用链式存储结构,还可以采用顺序存储结构&…...
论文精读1
Equivariant Pretrained Transformer for Unified Geometric Learning on Multi-Domain 3D Molecules 核心公式: 论文导图 创新在统一分子建模和块级去噪预训练。...
uniapp免费申请苹果证书教程每次7天可用于测试
准备一个苹果账号没有加入过任何组织的 然后下载appuploader下载链接 登录上去切记勾选上未付苹果688 然后点击苹果证书创建p12证书 创建描述文件 uniapp打包自定义基座 这就打包好了可以愉快地开发了,但每次生成只有7天,设备限制3个,…...
【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
摘要 气象数据分析在各行各业中扮演着重要的角色,尤其对于农业、航空、海洋、军事、资源环境等领域。在这些领域中,准确的气象数据可以对预测未来的自然环境变化和采取行动来减轻负面影响的决策起到至关重要的作用。 本系统基于Python Flask框架&#…...
eBPF编程指南(一):eBPF初体验
1 什么是EBPF? EBPF是一种可以让程序员在内核态执行自己的程序的机制,但是,为了安全起见,无法像内核模块一样随意调用内核的函数,只能调用一些bpf提前定义好的函数。为了让内核执行程序员自己的代码,需要指…...
基于深度学习的隧道缺陷检测系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)
摘要随着城市化进程的加快,隧道的建设和维护日益重要。隧道缺陷的及时检测与修复不仅关系到交通安全,也涉及到基础设施的耐久性和经济效益。传统的隧道缺陷检测方法依赖人工巡检,效率低且容易遗漏细微缺陷。本文提出了一种基于深度学习的隧道…...
eos低开视图查询,筛选空字符的数据,事件中的查询条件怎么写?
问题描述: eos低开视图查询,筛选空字符的数据,事件中的查询条件怎么写? 解决方案: 查询空字符串,可在查询条件中使op"empty",参考示例如下。 this.finalCondition.and.items.push({propertyName: "n…...
H5动态公共导航栏
CommonNavBar.vue: <template><divclass"common-nav-bar":style"navBarStyle"><!-- 状态栏占位,可以按项目需要删除或调整高度 --><div class"status-bar-placeholder"></div><!-- 主导…...
**发散创新:服务端渲染(SSR)的深度实践与性能优化实战**在现代前端架构
发散创新:服务端渲染(SSR)的深度实践与性能优化实战 在现代前端架构中,服务端渲染(Server-Side Rendering, SSR) 已不再是“可选特性”,而是提升首屏加载速度、SEO友好度和用户体验的核心手段之…...
软件开发常见骗局有哪些?
虚假高薪招聘陷阱以“零经验高薪入职”“包就业”为噱头,要求求职者付费培训。实际培训内容质量低下,承诺的就业机会无法兑现,甚至诱导贷款支付培训费用。外包项目诈骗谎称有高额预算项目外包,要求开发者支付“保证金”或“预付款…...
3个妙招搞定Cursor限制:开源工具让你告别API限制烦恼
3个妙招搞定Cursor限制:开源工具让你告别API限制烦恼 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tria…...
为什么选择Apache NetBeans?完整对比主流IDE的优势与特色
为什么选择Apache NetBeans?完整对比主流IDE的优势与特色 【免费下载链接】netbeans Apache NetBeans 项目地址: https://gitcode.com/gh_mirrors/ne/netbeans Apache NetBeans是一款由Apache软件基金会开发的开源集成开发环境(IDE)&a…...
AI技术原理--AI Token是什么:10分钟搞懂大模型基础单位
当你在ChatGPT里输入"你好,今天天气怎么样"的时候,你以为它真的读懂你的话吗? 并不是。 在你看不到的地方,有一个叫"分词器"的程序,正在把你的文字拆解成一个一个叫"Token"的单元。 …...
119. 使用 Fluentd concat 过滤器插件在牧场日志中串接多行日志
Situation 地理位置Logs of multiple lines are separated across multiple log events within Pod logs and there is a need to combine them into a single event before forwarding them to a logging solution. 多行日志在 Pod 日志中被分隔在多个日志事件中,…...
黑客技术?没你想象的那么难!—— DNS 劫持篇
黑客技术?没你想象的那么难!——dns劫持篇 什么是DNS劫持? DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后…...
