数据结构|并查集

Hello !朋友们,这是我在学习过程中梳理的笔记,以作以后复习回顾,有时略有潦草,一些话是我用自己的话描述的,可能不够准确,还是感谢大家的阅读!

目录

一、并查集Quickfind

二、两种算法

1)QuickFind[快查找]

思想:

代码框架:

2)QuickUnion[快合并]

思想:

基于size的算法优化:元素少的树,嫁接到元素多的树

基于rank的算法改进:矮的树,嫁接到高的树

路径压缩:所有元素都指向根结点

代码实现步骤:

代码框架:


一、并查集Quickfind

并查集是一种用于处理不相交集合合并查询问题的数据结构。以下是其相关概念:

  • 基本操作
    • 合并(Union):将两个不相交的集合合并为一个集合。
    • 查找(Find):确定一个元素属于哪个集合,通常返回该集合的代表元素。
  • 实现原理
    • 并查集通常使用树结构来实现,每个集合对应一棵树。树中的节点代表集合中的元素,根节点作为集合的代表元素。
    • 用一个数组来存储每个元素的父节点信息,通过不断查找父节点,最终找到根节点,从而确定元素所属的集合。
  • 路径压缩优化:在查找操作中,为了提高效率,可以采用路径压缩的优化方法。即在查找元素的根节点时,将路径上的所有节点直接连接到根节点,这样下次查找时就可以更快地找到根节点。
  • 应用场景
    • 连通性问题:判断图中两个节点是否连通,例如在网络拓扑中,判断两个设备是否通过网络连接。
    • 最小生成树:在构建最小生成树的过程中,用于判断两个顶点是否在同一个连通分量中,避免形成环。
    • 集合划分:将一组元素划分为不同的不相交集合,例如将一群人按照不同的兴趣爱好划分成不同的小组。

二、两种算法

并查集有两种算法,一种是快查找(QuickFind),另一种是快合并(QuickUnion),两种都要实现查找和和合并,只不过使用的不同的方法。

1)QuickFind[快查找]

查找效率:O(1)    合并效率:O(N)

思想:

查找:查找两个数是否在一组,借用索引,看两个数的ID是否相等

合并:合并两个组,将第二个组里所有的值的组号改为第一个组的组号

代码框架:

2)QuickUnion[快合并]

查找效率:O(logN)    合并效率:O(logN)

思想:

查找:查看两个数是否在一组,看两个数根ID是不是同一个,相等则是同一个,不等则不是同一组。

合并:不是合并a,b,而是a的根节点和b的根结点进行合并合并a合并到b,b合并到a都不一定是最好的,所以需要优化算法】(掌握一个就可以)

  • 基于size的算法优化元素少的树,嫁接到元素多的树
  • (目前我是这样理解的,不知道有没有错)
  • 基于rank的算法改进矮的树,嫁接到高的树
  • 路径压缩所有元素都指向根结点
  • 使路径上的所有结点都指向根结点,从而降低树的高度

代码实现步骤:

1、申请空间:根据需要给每个部分都申请出空间

2、初始化:给每个部分赋上初始的值

找索引

找根ID

3、查找:判断两个元素是否在一个集合,返回0,1)判断两个元素的根结点是否相同,则需要找到该借点,然后沿着起父节点找到根结点,最后比较根ID的值。

4、合并:

5、释放空间:

代码框架:

 

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

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

相关文章

【GPU 微架构技术】Pending Request Table(PRT)技术详解

PRT(Pending Request Table)是 GPU 中用于管理 未完成内存请求(outstanding memory requests)的一种硬件结构,旨在高效处理大规模并行线程的内存访问需求。与传统的 MSHR(Miss Status Handling Registers&a…

远程访问你的家庭NAS服务器:OpenMediaVault内网穿透配置教程

文章目录 前言1. OMV安装Cpolar工具2. 配置OMV远程访问地址3. 远程访问OMV管理界面4. 固定远程访问地址 前言 在这个数据爆炸的时代,无论是管理家人的照片和视频,还是企业老板处理财务报表和技术文档,高效的数据管理和便捷的文件共享已经变得…

微服务架构下的熔断与降级:原理、实践与主流框架深度解析

微服务架构下的熔断与降级:原理、实践与主流框架深度解析 在现代分布式系统中,熔断 (Circuit Breaker) 和 降级 (Degrade) 是保障系统弹性与高可用性的核心机制。本文将系统解析两者的原理、区别与协同方式,并结合主流框架 (Resilience4j、S…

docker-vllm运行大模型

vllm镜像下载,国内代理源 vllm/vllm-openai - Docker Image - 毫秒镜像https://1ms.run/r/vllm/vllm-openai 执行下载docker pull docker.1ms.run/vllm/vllm-openai 查看本地镜像 查看镜像 查看镜像 docker images导出镜像 docker save -o E:\docker\ollama.tar …

基于tabula对pdf中多个excel进行识别并转换成word中的优化(四)

对上一节进行优化: 1、识别多个excel 2、将表格中的nan替换成空字符串 一、示例中的pdf内容 二、完整代码参考: import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…

【10分钟读论文】Power Transmission Line Inspections电力视觉水文

标题Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems 2024 评分一颗星 论文《Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems》的核心内…

linux安装ragflow

先安装docker,操作步骤参考文章: Linux安装Docker docker安装完毕,下载ragflow源码: https://github.com/infiniflow/ragflow 下载完成,进入docker文件夹中,修改.env文件,因为默认安装的是sli…

学习记录:DAY20

技术探索之旅:YAML配置,依赖注入、控制反转与Java注解 前言 最近有点懒了,太松懈可不行。为了让自己保持学习的动力,我决定将最近的学习内容整理成博客,目标是让未来的自己也能轻松理解。我会尽量以整体记录的方式呈…

MCP:人工智能时代的HTTP?探索AI通信新标准

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

首版次误区有哪些?与软件测试报告又有什么联系?

在软件开发与测试领域,"首版次"这一概念关乎软件的版本控制与管理,是确保产品质量和发布节奏的重要环节。首版次,通常是指软件产品第一个对外发布或内部验收的版本号,标志着一次完整开发周期的结束和下一阶段工作的开始…

Laravel+API 接口

LaravelAPI 接口 网课连接:BIlibili. 中文文档. 1.RestFul Api编码风格 一、API设计 修改hosts,C:\Windows\System32\drivers\etc\hosts,增加127.0.0.1 api.lv8.com # Laravel 框架 用这个域名来测试(推荐规范) 在…

MIT6.S081-lab7前置

MIT6.S081-lab7前置 这部分包含了设备中断和锁的内容 设备中断 之前系统调用的时候提过 usertrap ,而我们的设备中断,比如计时器中断也会在这里执行,我们可以看看具体的逻辑: void usertrap(void) {int which_dev 0;if((r_sst…

Linux 下编译BusyBox

一、linux下编译 1.拉取busybox源码 git clone https://github.com/mirror/busybox.git 内容如下 2.配置make,建议在linux下单独开一个终端执行 进入busybox源码目录,使用如下命令 make menuconfig 3.报错 解决办法: 安装ncurses sud…

Element:Cheack多选勾选效果逻辑判断

效果展示 取消子级勾选&#xff0c;父级的勾选效果 代码合集 &#xff08;1&#xff09;组件代码 fromlist.cheackType 类型&#xff0c;permissio表示是权限. fromlist:[{id:1,children:[{...}]},...]传递的数据大致结构 <!-- 操作权限 --><template v-if"…

【3DMax脚本MaxScript开发:创建高效模型虚拟体绑定和材质管理系统,从3DMax到Unreal和Unity引擎_系列第一篇】

3ds Max 脚本开发 3ds Max 脚本开发&#xff1a;创建高效模型虚拟体绑定和材质管理系统3ds Max 插件制作背景&#xff1a;设计思路一、场景节点收集与过滤废话不多说&#xff0c;直接上完整代码&#xff1a;界面定义与基础设置界面控件创建状态变量核心逻辑函数过滤选项改变事件…

【Linux学习笔记】进程替换和自定义shell

【Linux学习笔记】进程替换和自定义shell &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】进程替换和自定义shell前言一.进程程序替换1.1 替换原理1.2 替换函数1.2.1函数解释1.2.2命名理解 二.自主…

【办公类-89-03】20250429AI写的研讨记录,清除格式,统一格式,名字替换。部分加粗,添加页眉

背景需求: 检查自即,需要AI一下院内的五次科研培训记录。 本次用了豆包 豆包写的不错,也是“水字数”的高手 把每次培训内容贴到WORD里 把AI资料贴到WORD里,发现问题: 1、字体、段落什么都是不统一的,需要统一改成宋体小四,1.5倍行距 2、十个研讨人也要改成真人。就找…

unity Orbbec Femto Bolt接入unity流程记录 AzureKinectExamples 插件 使用记录

奥比中光的深度相机Orbbec Femto Bolt是Microsoft的Azure Kinect DK的升级版&#xff0c;根据官网的文档配置环境遇到了一些问题&#xff0c;记录一下。 注意&#xff1a; 官网文档链接&#xff1a;Femto Bolt文档 1、首先连接相机到电脑USB3.0&#xff0c;接通电源&#xf…

聊天室系统:多任务版TCP服务端程序开发详细代码解释

1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端&#xff0c;如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢? 完成多任务&#xff0c;可以使用线程&#xff0c;比进程更加节省内存资源。 2. 具体实现步骤 编写一个TCP服务端程序&#xff0c;循环等…

Python3:装饰器、生成器与迭代器

Python3&#xff1a;装饰器、生成器与迭代器 一、&#x1f3ad; 装饰器&#xff1a;给函数穿上"魔法外衣"装饰器基本概念为装饰器添加参数传递功能带参数的装饰器functools.wraps&#xff1a;保留原函数的元信息实用装饰器示例1. 计时器装饰器2. 缓存装饰器(Memoizat…