算法与数据结构(九)--并查集

news2025/1/9 1:35:12

并查集是一种树型的数据结构,并查集可以高校地进行如下操作:
*查询元素p和元素q是否在同一组
*合并元素p和元素q所在的组

一.并查集结构

并查集也是一种树型结构,这种树的要求比较简单:
1.每个元素都唯一的对应一个结点;
2.每一组数据中的多个元素都在同一颗树中;
3.一个组中的数据对应的树和另外一个组中的数据对应的树之间没有任何联系;
4.元素在树中并没有子符级关系的硬性要求。

简单说就是同一组的元素可以看成是一棵树。

 二.并查集API设计

三.并查集的实现 

1.UF(int N)构造方法实现

【1】初始情况下,每个元素都在独立的分组中,所以,初始情况下,并查集中的数据默认分为N个组;
【2】初始化数组eleAndGroup
【3】将eleAndGroup数组的索引看做是每个结点存储的元素,把eleAndGroup数组每个索引的值看做是该结点所在的分组,那么初始化情况下,i索引处存储的值就是i

 2.union(int p,int q)合并方法实现

1.如果p和q已经在同一个分组中,则无需合并
2.如果p和q不在同一个分组中,则只需要将p元素所在的所有元素的组标识符修改为q元素所在组的标识符即可
3.分组数量-1

四.优化union算法--UF_Tree

1.UF_Tree算法优化

为了提升union算法的性能,我们需要重新设计find方法和union方法的视线,此时我们现需要对我们的之前数据结构中的eleAndGourp数组的含义进行重新设定:
1.我们仍然让eleAndGroup数组的索引作为某个结点的元素;
2.eleAndGroup[i]的值不再是当前结点所在的分组标识,而是该结点的父结点;

 2.API设计

3.find(int p)查询方法实现

【1】判断当前元素p的父节点eleAndGroup[p]是不是自己,如果是自己则证明已经是根结点了;
【2】如果当前元素p的父结点不是自己,则让p=eleAndGroup[p],继续找父结点的父节点,知道找到根结点为止;

 4.union(int p,int q)合并方法实现

1.找到p元素所在树的根结点
2.找到q元素所在树的根结点
3.如果p和q已经在同一个树中,则无需合并;
4.如果p和q不在同一分组中,则需要将p元素所在树根结点的父节点设置为q元素的根结点即可;
5.分组数量减一

五.路径压缩--UF_Tree_Weighted

UF_Tree中最坏情况下union算法的时间复杂度为O(N^2),其最主要的问题在于最坏情况下,树的深度和数组的大小一样,如果我们能够通过一些算法让合并时,生成的树的深度尽可能的小,就可以优化find方法。
之前我们在union算法中,合并树的时候将任意的一颗树连接到另外一颗树,这种方法是比较暴力的,如果我们把并查集中每一棵树的大小记录下来,然后再每次合并树的时候,把较小的树连接到较大的树上,就可以减小树的深度。

只要我们保证每次合并,都能把小树合并到大树上,就能够压缩合并后新树的路径,这样就能提高find方法的效率。为了完成这个需求,我们需要另外一个数组来记录存储每个根结点对应的树中元素的个数,并且需要一些代码调整数组中的值。

UF_Tree_Weighted API设计

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海外ios应用商店优化排名因素之关键词

与Google Play Store相比,在Apple的App Store中,应用描述不会影响关键词排名。不过有一个专门针对App Store的关键词列表,我们可以在其中放置相关关键词。 1、关键词列表的限制仅为100个字符。 使用排名的竞争性较低的关键词,尝试…

Ubuntu无法连接外网

配置环境时,发现实验室服务器这阵子不能连接外网,网上看看了解决方案,确定是DNS的问题,解决方案如下: 首先,我尝试ping www.baidu.com,是可以ping通的,内网访问没问题。排除是否为网络连接问题…

校企合作 | 大势智慧受邀参与北斗共同体建设

8月16日,长江工业职业学院(后简称“长江工院”)副校长刘文胜,质管处处长黄世涛,测绘信息工程系党总支书记刘飞、系副主任陈志兰、系教师陈文玲一行莅临武汉大势智慧科技有限公司(后简称“大势智慧”&#x…

什么是数字化和数字化转型?

数字化和数字化转型是企业、组织和流程现代化背景下经常使用的术语,以应对技术在我们生活中日益重要的作用。虽然它们是相关的概念,但它们具有不同的含义。 数字化是指将模拟信息转换为数字格式的过程。涉及获取物理信息,例如文本、图像、声…

FairyGUI编辑器的弹窗操作【插件】

之前在FairyGUI编辑器菜单扩展中,我使用了App.Alert("复制失败")来提示操作是否成功。这篇则会说一下我们可以使用的弹窗提示,以及做到类似资源发布成功时的“发布成功”飘窗。 打开APP的API脚本,可以看到有很多公开方法&#xff…

HCIP-Datacom:一篇掌握IPSec VPN的原理与配置!!!

一、背景 随着Internet的发展,越来越多的企业直接通过Internet进行互联,但由于IP协议未考虑安全性,而且Internet上有大量的不可靠用户和网络设备,所以用户业务数据要穿越这些未知网络,根本无法保证数据的安全性&#x…

LeetCode——有效的括号

这里,我提供一种用栈来解决的方法: 思路:栈的结构是先进后出,这样我们就可以模拟栈结构了,如果是‘(’、‘{’、‘[’任何一种,直接push进栈就可以了,如果是‘}’、‘)’…

计算机视觉入门 5)自定义卷积网络

系列文章目录 计算机视觉入门 1)卷积分类器计算机视觉入门 2)卷积和ReLU计算机视觉入门 3)最大池化计算机视觉入门 4)滑动窗口计算机视觉入门 5)自定义卷积网络计算机视觉入门 6) 数据集增强(D…

多客户企业选择拥有哪些功能的CRM系统?

管理海量客户信息对于每一家企业都是巨大的挑战。粗放式的管理客户资料是对资源的一种浪费,让很多有意向的高价值客户流失。客户比较多,有什么CRM系统推荐吗?帮助企业轻松地跟进客户,提高销售效率? 1.易于使用 首先是…

昨晚做梦面试官问我三色标记算法

本文已收录至GitHub,推荐阅读 👉 Java随想录 微信公众号:Java随想录 原创不易,注重版权。转载请注明原作者和原文链接 文章目录 三色标记算法增量更新原始快照 某天,爪哇星球上,一个普通的房间&#xff0c…

技术的巅峰演进:深入解析算力网络的多层次技术设计

在数字化时代的浪潮中,网络技术正以前所未有的速度演进,而算力网络作为其中的一颗明星,以其多层次的技术设计引领着未来的网络构架。本文将带您深入探索算力网络独特的技术之旅,从底层协议到分布式控制,为您呈现这一创…

chatgpt官方支持微调了!

前言 刚刚openai在官网宣布chatgpt支持微调了!具体支持微调的模型有: 并且GPT-3.5-Turbo-16k和GPT4在今年晚些也会支持微调。 其在官网也介绍了一些微调和准备数据的实战经验,可以学习~ 官方文档: https://platfor…

常用的数据可视化工具有哪些?要操作简单的

随着数据量的剧增,对分析效率和数据信息传递都带来了不小的挑战,于是数据可视化工具应运而生,通过直观形象的图表来展现、传递数据信息,提高数据分析报表的易读性。那么,常用的操作简单数据可视化工具有哪些&#xff1…

高并发保证接口幂等性方案

接口幂等的解决方案 什么是接口幂等性 接口幂等性是指无论调用多少次相同的接口请求,对系统的状态和数据产生的影响都是一致的。简而言之,幂等性保证了对同一个接口请求的重复调用不会产生额外的副作用或改变系统的状态。 在设计和实现接口时&#xf…

SQL Server 执行报错: “minus“ 附近有语法错误。

sql server 执行带 minus 的语句一直报错,如下图: 找了好久才知道minus是Oracle里面的语法,SQL server 应用 EXCEPT。

PCL中的ISS特征点检测

ISS是基于内部形态描述子(ISS) 的特征点。 算法检测流程(参考论文:基于ISS 特征点结合改进ICP 的点云配准算法): PCL中的实现: template<typename PointInT, typename PointOutT, typename NormalT> void pcl::ISSKeypoint3D<PointInT, PointOutT, NormalT>…

斯坦福大学医学院教授:几年内ChatGPT之类的AI将纳入日常医学实践

注意&#xff1a;本信息仅供参考&#xff0c;分享此内容旨在传递更多信息之目的&#xff0c;并不意味着赞同其观点或证实其说法。 在一项新研究中&#xff0c;斯坦福大学研究人员发现&#xff0c;ChatGPT在复杂临床护理考试题中可以胜过一、二年级的医学生。此项研究显示&#…

组件库的使用和自定义组件

目录 一、组件库介绍 1、什么是组件 2、组件库介绍 3、arco.design 二、组件库的使用 1、快速上手 2、主题定制 3、暗黑模式 4、语言国际化 5、业务常见问题 三、自定义组件 2、组件开发规范 3、示例实践guide-tip 4、业务组件快速托管 一、组件库介绍 1、什么是…

allegro输出.IPC文件

1、ipc文件的导出 板厂会使用cam软件生产一个网表文件&#xff1b;如果传递给板厂的数据中也有一个IPC文件&#xff0c;板厂将对两个网表文件进行对比&#xff1b;提高生产的安全性&#xff0c;准确性&#xff1b; 1&#xff0c;PCB软件输出的光绘文件&#xff0c;有时会变异&a…

从LeakCanary看如何生成内存快照

前面我们已经完成了生命周期监控并且可以通过ReferenceQueue和WeakHashMap的比较确定哪些对象发生泄漏了&#xff0c;那么接下来需要考虑的就是如何确定这个对象是被谁持有导致泄漏的呢&#xff1f; 从内存泄漏一文中可知&#xff0c;当我们使用Android Studio或MAT分析内存泄…