Union-Find Algorithm-并查集

目录

1.概念

2.并查集的优化

1.路径压缩(Path Compression)

1)隔代压缩:

2)完全压缩:

2.按秩合并

1.概念

并查集:用于判断一对元素是否相连,它们的关系是动态添加(一边查询一边合并)的,这一类叫做动态连通性问题

作用:支持元素的合并、查询是否在同一个集合

        合并:将一个集合的根节点指向另一个集合的根节点,当根结点相同就说明在同一个集合中

数据结构:数组或哈希表;表示节点指向的父节点,初始化时指向自己

2.并查集的优化

1.路径压缩(Path Compression)

核心思想:只关心两个顶点的连通性,而不关心两个顶点之间的距离

        为了避免并查集所表示的树形结构高度过高,影响查询性能,我们在查询的过程中使用路径压缩将不同变量转换为同一个变量,从而降低树的高度

1)隔代压缩:

        将一个节点指向它的父节点的父节点,然后对该节点新的父节点执行隔代压缩,令其指向它的父节点的父节点,依次类推直到指向根节点(体现了核心思想:只关注连通性,不关注如何连通的)

                                        压缩前                                                            压缩后

代码实现:

//parent[a] = b,表示:结点 a 的(直接)父亲结点是 b
//隔代压缩
public int find(int x){while(x != parent[x]){parent[x] = parent[parent[x]];x = parent[x];}return x;
}

2)完全压缩:

        将节点到根节点沿途经过的节点都指向根节点;

如下图:在查询节点4的根节点的同时,将节点4到根节点的沿途所有节点的父亲节点都指向根节点,特殊情况下,根节点的父节点就是根节点自己;从而使得路径压缩后的树的高度均为2

                                        压缩前                                                            压缩后

代码实现:需要借助递归算法

//完全压缩
public int find(int x){if(parent[x] != x){parent[x] = find(parent[x]);}return parent[x];
}

一般来说:完全压缩的效率并不如隔代压缩,且隔代压缩多执行几次也能够达到完全压缩的效果

2.按秩合并

核心思想:合并过程中,将高度较小的树的根节点指向高度较大的根节点,从而避免合并后树的高度增加

秩:以当前节点为根节点的树的高度;或者是以当前节点为根节点的树的节点的个数

注意:当同时使用路径压缩和按秩合并时,难以维护的准确定义,因此一般不维护;且合并与查询的时间复杂度接近O(1)

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

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

相关文章

nlp系列(7)实体识别(Bert)pytorch

模型介绍 本项目是使用Bert模型来进行文本的实体识别。 Bert模型介绍可以查看这篇文章:nlp系列(2)文本分类(Bert)pytorch_bert文本分类_牧子川的博客-CSDN博客 模型结构 Bert模型的模型结构: 数据介绍 …

骨传导耳机的危害有哪些?会损害听力吗?

如果正常的使用,骨传导耳机是没有危害的,由于骨传导耳机独特的传声方式,所以并不会对人体造成损伤,还可以在一定程度上保护听力。 如果想更具体知道骨传导耳机有什么危害,就要先了解什么是骨传导耳机,骨传…

小程序自定义tabbar

前言 使用小程序默认的tabbar可以满足常规开发,但是满足不了个性化需求,如果想个性化开发就需要用到自定义tabbar,以下图为例子 一、在app.json配置 先按照以往默认的形式配置,如果中间的样式特殊则不需要配置 "tabBar": {&qu…

来可LCWLAN-600P产品使用和常见问题说明

01LCWLAN-600P简介 LCWLAN-600P是来可电子最新生产的一款CAN转WiFi设备,该设备的主要功能是将CAN数据转换成网络数据并通过无线网络转发出去。设备支持8~30V宽压供电,出厂默认配置为AP模式,设备供电后可在电脑的WiFi搜索栏搜索到名称为LCWLA…

【Linux-Day10-信号量,共享内存,消息队列】

信号量 信号量描述 信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源 时,需要对信号量的值进行原子减一,该操作被称为 P 操作。 当信号量值为 0 时,代表没有资源可用,P 操作…

2022年全国研究生数学建模竞赛华为杯B题方形件组批优化问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 B题 方形件组批优化问题 原题再现: 背景介绍   智能制造被“中国制造2025”列为主攻方向, 而个性化定制、更短的产品及系统生命周期、互联互通的服务模式等成为目前企业在智能制造转型中的主要竞争点。以离散行业中的产品为…

20230912java面经整理

1.gc算法有哪些 引用计数(循环引用)和可达性分析找到无用的对象 标记-清除:简单,内存碎片,大对象找不到空间 标记-复制:分成两半,清理一半,没有碎片,如果存活多效率低&a…

Python之离线安装第三方库

1、场景介绍 在一些服务器上,我们搭建完Python环境之后,因为服务器的网络限制原因,不能直接通过pip命令下载安装Python的依赖包。 因此,我们需要在可以正常上网的服务器上下载好所需的依赖包文件,然后拷贝到目标服务器…

嘉泰实业:真实低门槛,安全有保障

在互联网金融大行其道的当下,无论用户是多么的青睐、喜爱这种便捷的理财方式,也一定得把资金安全放在心上。要投就投那些实力背景雄厚,诚信经营的平台,可以选择投资用户基数庞大的理财老品牌,也可以选择发展势头迅猛的…

OneFormer: One Transformer to Rule Universal Image Segmentation论文笔记

论文https://arxiv.org/pdf/2211.06220.pdfCodehttps://github.com/SHI-Labs/OneFormer 文章目录 1. Motivation2. 方法2.1 与Mask2Former的相同之处2.2 OneFormer创新之处2.3 Task Conditioned Joint Training2.4 Query Representations2.4 Task Guided Contrastive Queries 3…

【Redis】为什么要学 Redis

文章目录 前言一、Redis 为什么快二、Redis 的特性2.1 将数据储存到内存中2.2 可编程性2.3 可扩展性2.4 持久性2.5 支持集群2.6 高可用性 三、Redis 的应用场景四、不能使用 Redis 的场景 前言 关于为什么要学 Redis 这个问题,一个字就可以回答,那就是&…

学习记忆——宫殿篇——记忆宫殿——数字编码——记忆数字知识点

面对错综复杂的数字信息,我们想要记住可以通过以下三点: 1、首先找到关键词 2、数字编码牢记 3、关键词跟编码链接 案例:会计考试-时间期限为 3、7、10 日、1 年的知识点 3 天 (1)托收承付的承付期验单付款为 3 天。 (2)失票人应当在通…

帝国cms后台访问链接提示“非法来源”解决方法

提示“非法来源”的原因 帝国CMS更新升级7.2后,新增了后台安全模式,后台推出了金刚模式来验证链接来源。后台所有链接都需要登录后才能访问,直接强制访问后台页面链接都会提示“非法来源”。不是正常登录后台的用户无法直接访问到内容,保证了后台数据安全。 那么我们在日常…

【设计模式】三、概述分类+单例模式

文章目录 概述设计模式类型 单例模式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查静态内部类枚举单例模式在 JDK 应用的源码分析 …

04-Redis哨兵高可用架构

上一篇:03-Redis主从架构 架构说明 sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过s…

【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

文章目录 一、爬取目标二、展示爬取结果三、爬虫代码四、同步视频五、附完整源码 您好,我是 马哥python说,一枚10年程序猿。 一、爬取目标 之前,我分享过一些B站的爬虫: 【Python爬虫案例】用Python爬取李子柒B站视频数据 【Pyt…

Java实现合并多个excel操作

涉及较多封装的工具类,所有依赖的工具类均提供代码,根据名称新建对应的类,在每个工具类中再引入相应的依赖即可 首先需要明确的是,需要合并的每个excel的表头名称必须是相同的, 针对表头,建立传输的dto&a…

IDEA设置Maven 镜像

第一步&#xff1a;右键项目&#xff0c;选择Maven->Create ‘settings.xml’ 已经存在的话是Open ‘settings.xml’&#xff1a; 第二步&#xff1a;在settings.xml文件中增加阿里云镜像地址&#xff0c;代码如下&#xff1a; <?xml version"1.0" encodin…

Android Ble蓝牙App(七)扫描过滤

Ble蓝牙App&#xff08;七&#xff09;扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示&#xff0c;本篇文章中将增…

Electron和vue3集成(推荐仅用于开发)

本篇我们仅实现Electron和vue3通过先运行起vue3项目&#xff0c;再将vue3的url地址交由Electron打开的方案&#xff0c;仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…