并查集(未压缩未按秩合并)
并查集(Union-Find)是一种用于处理不相交集合(disjoint-set)的数据结构,主要用于处理连通性问题。并查集支持两种操作:
- 查找(Find):确定元素所属的集合。
- 合并(Union):将两个集合合并为一个集合。
并查集通常应用于图的连通性问题,例如判断图中两点是否连通、计算连通分量等。
动画描述
将(1,2),(2,3),(2,4)union后的图例,可以观察到不带压缩的情况下树的高度在持续增长。

问题描述
下面是一个不带路径压缩的并查集(Union-Find)。这个版本仅使用基本的查找和合并操作:
代码实现
public class SimpleUnionFind {private int[] parent;// 初始化并查集public SimpleUnionFind(int size) {parent = new int[size];for (int i = 0; i < size; i++) {parent[i] = i;}}// 查找操作,不带路径压缩public int find(int p) {while (p != parent[p]) {p = parent[p];}return p;}// 合并操作,不带按秩合并public void union(int p, int q) {int rootP = find(p);int rootQ = find(q);if (rootP != rootQ) {parent[rootP] = rootQ;}}// 判断两个节点是否连通public boolean connected(int p, int q) {return find(p) == find(q);}public static void main(String[] args) {int size = 10; // 假设有10个元素SimpleUnionFind uf = new SimpleUnionFind(size);uf.union(1, 2);uf.union(2, 3);uf.union(4, 5);uf.union(6, 7);uf.union(5, 6);System.out.println("1 和 3 是否连通: " + uf.connected(1, 3)); // trueSystem.out.println("1 和 4 是否连通: " + uf.connected(1, 4)); // falseSystem.out.println("4 和 7 是否连通: " + uf.connected(4, 7)); // trueuf.union(1, 4);System.out.println("1 和 4 是否连通: " + uf.connected(1, 4)); // true}
}
解释
-
初始化:
parent数组用于存储每个元素的父节点,初始时每个元素的父节点是它自己。
-
查找操作(find):
- 查找元素所属的集合,通过不断访问父节点来找到根节点。因为没有路径压缩,树的高度可能会很高,查找的时间复杂度是O(n)(n是元素个数)。
-
合并操作(union):
- 合并两个集合,将一个集合的根节点指向另一个集合的根节点。因为没有按秩合并,树的高度可能会很高,合并的时间复杂度也是O(n)。
-
连通性检查(connected):
- 判断两个元素是否属于同一个集合,即查找它们的根节点是否相同。
这个实现是并查集的基础版本,没有进行路径压缩和按秩合并的优化,因此在处理较大的数据集时效率较低。路径压缩和按秩合并的优化可以显著提高并查集的性能。
相关文章:
并查集(未压缩未按秩合并)
并查集(Union-Find)是一种用于处理不相交集合(disjoint-set)的数据结构,主要用于处理连通性问题。并查集支持两种操作: 查找(Find):确定元素所属的集合。合并࿰…...
读书其实并没有那么大的作用
开场白 Hey,书虫们和生活探索者们!今天我们来聊聊一个老生常谈却又常谈常新的话题——读书。有人说,读书能改变命运,但也有人说,读书不过是生活的调味品。那么,读书到底有啥用?让我们一起来扒一…...
微信小程序/vue将金额/数字转为千分位显示在页面上
vue将金额转为数字显示在页面上 toThousands (number) {let isNegative_ false // 判断正负if (Number(number) < 0) {isNegative_ truenumber String(number).split(-)[1] // 分离负号 并把String类型的数字并赋值给number}if (Number(number) ! 0 && Math.abs…...
如何查看树莓派的 OS 和内核版本
在使用树莓派开发的时候,有时候需要知道树莓派的一些基本信息,如:OS 版本,内核版本,CPU 构架等,在使用 40 pin 扩展接口的时候,需要知道每个管脚的具体定义。 1. 查看 OS 版本: 使…...
php的mysql操作可实现简单登录功能
文章目录 1. 表单和请求(1) 表单操作(2) 网络请求(3) $_REQUEST超全局变量 2. mysql数据库操作1) mysqli连接操作2) 操作数据库3) 预处理语句4) pdo操作数据库5) 创建连接并执行查询语句 1. 表单和请求 主要使用到**$_GET** 和 $_POST这两个超全局变量,分别对应两种请求 (1) …...
c#复制窗体Form方法
直接复制三个类粘贴到vs的项目中...
C:图案打印
引言 本篇文章讲了一些常见的图形编程题,并总结了一些规律。 1、打印空心正方形 1.1 代码展示: #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…...
WebLogic:弱口令,木马反弹连接
weblogic WebLogic 是 Oracle 公司开发的应用服务器,主要用作开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的 Java 应用服务器。它在历史上曾出现过多个安全漏洞,其中包括弱口令、任意文件上传、SSRF、反序列化漏洞等 常见版本&a…...
深度学习图像处理环境搭建
Anaconda安装 Anaconda介绍 Anaconda是一个用于科学计算和数据科学的开源发行版,它包含了许多流行的Python库和工具,旨在简化数据分析和机器学习任务的开发过程。Anaconda提供了一个集成的开发环境,包括Python解释器、包管理工具࿰…...
这几个高级爬虫软件和插件真的强!
亮数据(Bright Data) 亮数据是一款强大的数据采集工具,以其全球代理IP网络和强大数据采集技术而闻名。它能够轻松采集各种网页数据,包括产品信息、价格、评论和社交媒体数据等。 网站:https://get.brightdata.com/we…...
【实战】机器学习Kaggle比赛—House Prices - Advanced Regression Techniques
House Prices - Advanced Regression Techniques 一、准备工作(1)查看项目概述(2)下载数据集(3)导入部分必要的库(4)参数设置(图形显示大小屏蔽警告)…...
【前端面试题】前端工程化、Webpack、Vite、Git项目管理相关问题
目录 关于前端工程化关于Webpack关于Vite关于Git项目管理综合性问题 关于前端工程化 1. 前端工程化的定义和好处 问题:什么是前端工程化?它的主要好处是什么?答案:前端工程化是指在前端开发中应用系统化、自动化和标准化的方法&…...
【号外】「省点时间」新功能暖心上线!
好消息,好消息,重大好消息! 应广大用户朋友的要求,经过一个多月的鏖战,「省点时间」的VIP功能终于上线啦! 新版本在原有基础上,新增VIP功能,用户拥有了更多选择,赶快来…...
Python面试题:如何使用WebSocket实现实时Web应用
使用 WebSocket 实现实时 Web 应用可以使你的应用程序具备实时双向通信的能力。以下是一个完整的指南,展示如何使用 Django Channels 和 WebSocket 实现一个简单的实时 Web 应用。 环境准备 安装 Django Channels: pip install channels创建 Django 项目: django-a…...
公交信息在线查询小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,线路信息管理,站点分类管理,站点信息管理,周边分类管理周边信息管理,系统管理 微信端账号功能包括:系统首页࿰…...
Airtest实施手机精准截图
Airtest实施手机精准截图 一、接口查找 首先我们需要知道我们应该怎么实现用脚本去进行局部截图,我们可以通过翻阅Airtest的API文档发现,Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图,在我们往期的推文里也介绍过该接…...
前端面试宝典【设计模式】【2】
欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…...
技术汇总笔记7:条件分支相关内容
嵌套Switch语句的使用和改进 嵌套的switch语句虽然在语法上是允许的,但可能会使代码难以阅读和维护。例如: switch (_get_urgency_ob_type(sData.structure_name)) {case URGENCY_OB_PRESSUREINFO:{switch(_get_urgency_ob_sub_type( sData.attribute_…...
一文让你学会python:面向对象
面向对象编程(OOP) 一.类与实例 1.类: 是对现实世界描述的一种类型,是抽象的,是实例的模板,类名采用大驼峰,定义方式为 class 类名: pass 。 2.实例: 根据类创建的具体对象&…...
mac电脑安装 docker镜像 btpanel/baota
PS:docker链接:https://hub.docker.com/r/btpanel/baota 1、将docker下载到本地,然后运行端口映射 docker run -d --restart unless-stopped --name baota -p 8888:8888 -p 22:22 -p 443:443 -p 80:80 -p 888:888 -v ~/website_data:/www/w…...
如何突破分子观察瓶颈?PyMOL开源版的3大核心优势
如何突破分子观察瓶颈?PyMOL开源版的3大核心优势 【免费下载链接】pymol-open-source Open-source foundation of the user-sponsored PyMOL molecular visualization system. 项目地址: https://gitcode.com/gh_mirrors/py/pymol-open-source PyMOL开源版作…...
告别卡顿!GSYVideoPlayer的ExoPlayer内核配置全攻略(支持HLS/m3u8直播流)
GSYVideoPlayer的ExoPlayer内核深度调优:打造极致流畅的HLS直播体验 去年接手一个海外直播项目时,遇到最头疼的问题就是m3u8流媒体的卡顿和延迟。测试了各种方案后,最终通过GSYVideoPlayer的ExoPlayer内核解决了这个难题。今天就把这些实战经…...
UNIX文件系统设计:一切皆文件的原理与实践
UNIX 文件系统设计哲学:一切皆文件的深度解析1. 核心设计理念1.1 统一I/O抽象模型UNIX系统最核心的设计原则是提供访问各类输入/输出资源的统一范式。系统将所有I/O资源抽象为"文件"对象,通过同一套API接口暴露给用户空间。这种设计使得开发者…...
依托AI改写功能的五个实用技巧,论文重复率由30%快速降至合规
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
ArcMap地图数字化实战:从加载地形图到保存成果的完整流程(附常见问题解决)
ArcMap地图数字化实战:从加载地形图到保存成果的完整流程(附常见问题解决) 在GIS领域,地图数字化是将纸质地图或图像转换为计算机可识别和处理的数字格式的基础工作。这项技能不仅是GIS专业学生的必修课,也是城市规划、…...
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配 1. 环境准备与快速部署 SenseVoice-Small ONNX模型是一个经过量化处理的高效语音识别解决方案,特别适合跨境电商场景中的多语言语音处理需求。这个模型支持超过50种语言&#x…...
Agent Skill 从使用到原理,一次讲清
目录前言1. 本期内容概览2. Agent Skill 是什么3. Agent Skill 的基本用法4. 高级用法(Reference)5. 高级用法(Script)6. 渐进式披露机制7. Agent Skill vs MCP结语参考前言 学习 UP 主 马克的技术工作坊 的 Agent Skill 从使用到…...
嵌入式GUI技术选型与实现方案对比
1. 主流小型嵌入式GUI技术解析1.1 TouchGFX技术方案TouchGFX以其华丽的界面效果和流畅的动画著称,采用C语言开发,特别适合STM32系列MCU。其核心优势在于TouchGFX Designer工具,该工具提供:可视化界面设计环境丰富的控件库…...
3分钟轻松获取无水印抖音视频:DouYinBot全能解析工具使用指南
3分钟轻松获取无水印抖音视频:DouYinBot全能解析工具使用指南 【免费下载链接】DouYinBot 抖音无水印下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在短视频创作的浪潮中,每个创作者都曾遇到这样的困扰:精心挑选的抖音…...
Delphi XE在Linux上开发桌面应用:从安装FMXLinux插件到第一个跨平台GUI程序
Delphi XE在Linux上开发桌面应用:从安装FMXLinux插件到第一个跨平台GUI程序 引言 对于熟悉Delphi的开发者来说,将Windows平台上的成熟应用迁移到Linux环境一直是个挑战。Delphi XE虽然支持Linux开发,但官方仅提供命令行应用的支持ÿ…...
