并查集基础与二分搜索树的特性

news2024/7/4 5:19:58

并查集基础

一、概念及其介绍

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。

并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。

二、适用说明

并查集用在一些有 N 个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这个过程看似并不复杂,但数据量极大,若用其他的数据结构来描述的话,往往在空间上过大,计算机无法承受,也无法在短时间内计算出结果,所以只能用并查集来处理。

三、并查集的基本数据表示

 

3a5dba87949df6eb5af6184217a28431.png

如上图 0-4 下面都是 05-9 下面都是 1,表示 0、1、2、3、4 这五个元素是相连接的,5、6、7、8、9 这五个元素是相连的。

 

1e265797338bed17f6995d93cfe4dd5d.png

再如上图 0、2、4、6、8 下面都是 0 这个集合,表示 0、2、4、6、8 这五个元素是相连接的,1、3、5、7、9 下面都是 1 这个集合,表示 0,1、3、5、7、9 这五个元素是相连的。

构造一个类 UnionFind,初始化, 每一个id[i]指向自己, 没有合并的元素:

...
public UnionFind1(int n) {
        count = n;
        id = new int[n];
        // 初始化, 每一个id[i]指向自己, 没有合并的元素
        for (int i = 0; i < n; i++)
            id[i] = i;
    }
...

Java 实例代码

源码包下载:Download

UnionFind.java 文件代码:

package runoob.union;

public class UnionFind{
    private int[] id;
    // 数据个数
    private int count;

    public UnionFind1(int n) {
        count = n;
        id = new int[n];
        for (int i = 0; i < n; i++)
            id[i] = i;
    }

}  

二分搜索树的特性

一、顺序性

二分搜索树可以当做查找表的一种实现。

我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor(后继)、predecessor(前驱)、floor(地板)、ceil(天花板、rank(排名第几的元素)、select(排名第n的元素是谁)这些都是二分搜索树顺序性的表现。

二、局限性

二分搜索树在时间性能上是具有局限性的。

如下图所示,元素节点一样,组成两种不同的二分搜索树,都是满足定义的:

 

095ba7e31646b69178cf722d020c6db2.png

二叉搜索树可能退化成链表,相应的,二叉搜索树的查找操作是和这棵树的高度相关的,而此时这颗树的高度就是这颗树的节点数 n,同时二叉搜索树相应的算法全部退化成 O(n) 级别。

 

 

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

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

相关文章

卫星物联网生态建设全面加速,如何抓住机遇?

当前&#xff0c;卫星通信无疑是行业最热门的话题之一。近期发布的华为Mate 60 Pro“向上捅破天”技术再次升级&#xff0c;成为全球首款支持卫星通话的大众智能手机&#xff0c;支持拨打和接听卫星电话&#xff0c;还可自由编辑卫星消息。 据悉&#xff0c;华为手机的卫星通话…

开源日报 0829 | 改变面试方式:拒绝死板问题,推崇真实情境

poteto/hiring-without-whiteboards Stars: 38.3k License: MIT 这个项目是一个不进行 “白板” 面试的公司 (或团队) 的列表。“白板” 在这里被用作一种隐喻&#xff0c;代表与糟糕的面试实践相关联的 CS 知识问答题。该项目中列出的公司和团队使用类似日常工作情境下的面试…

成功解决Selenium 中116版本的chromedriver找不到问题

Selenium 中的Google&#xff08;谷歌浏览器&#xff09;最新版本chromedriver 文章目录 Selenium 中的Google&#xff08;谷歌浏览器&#xff09;最新版本chromedriver1.当前作者的谷歌浏览器版本2.当前驱动官网的最新版本3.当不想降低浏览器版本继续使用谷歌浏览器的办法 1.当…

C基础-操作符详解

操作符分类&#xff1a; 算数操作符&#xff1a; - * / % //算数操作符 // int main() // { // // /除法 1.整数除法(除号两端都是整数) 2浮点数除法&#xff0c;除号的两端只要有一个小数就执行小数除法 // // 除法中&#xff0c;除数为0 // int a 7 / 2; /…

06目标检测-One-stage的目标检测算法

一、 One-stage目标检测算法 使用CNN卷积特征直接回归物体的类别概率和位置坐标值&#xff08;无region proposal&#xff09;准确度低&#xff0c;速度相对two-stage快 二、One-stage基本流程 输入图片------对图片进行深度特征的提取&#xff08;主干神经网络&#…

go初识iris框架(七) - 实战资源导入和项目框架搭建

实战项目框架搭建 如下是项目框架搭建后的说明&#xff1a; config:&#xff1a;项目配置文件及读取配置文件的相关功能controller:控制器目目录,项目各个模块的控制器及业务逻辑处理的所在目录datasource:实现mysql连接和操作、封装操作mysql数据库的目录。model:数据实体目…

解决stable diffusion webui1.6 wd1.4 tagger加载失败的问题

由于webui源码的变化&#xff0c;需要修改两个地方的import 1.tagger/ui.py # 第十行 # from webui import wrap_gradio_gpu_call # 原代码 from modules.call_queue import wrap_gradio_gpu_call1.preload.py # 第4行开始 # from modules.shared import models_path # 原…

Jenkins List Git Branches插件 构建选择指定git分支

List Git Branches Parameter | Jenkins pluginAdds ability to choose from git repository revisions or tagshttps://plugins.jenkins.io/list-git-branches-parameter/ 1、安装组件 List Git Branches 2、验证功能 1&#xff09;新建任务 2&#xff09;新增构建参数 3&…

第7章_freeRTOS入门与工程实践之模块使用说明与STM32CubeMX配置

本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id724601559592 配套资料获取&#xff1a;https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…

潍坊科技学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

潍坊科技学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

每日一博 - 闲聊Https工作原理

文章目录 HTTPS工作原理数据的加密和解密与HTTP相比&#xff0c;HTTPS增加了多少性能开销&#xff1f;Flow小结 HTTPS工作原理 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 Hypertext Transfer Protocol&#xff08;HTTP&#xff09;的扩展。HTTPS使用…

分类预测 | Matlab实现基于BP-Adaboost数据分类预测

分类预测 | Matlab实现基于BP-Adaboost数据分类预测 目录 分类预测 | Matlab实现基于BP-Adaboost数据分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于BP-Adaboost数据分类预测&#xff08;Matlab完整程序和数据&#xff09; 2.多特征输入…

mianshiyan资料汇总(整理后)

前端优化方式 css3特性, [html5的特性](https://blog.csdn.net/qq_53472371/article/details/121881111) flex, 移动端开发, 各种居中 反爬虫&#xff0c;加密&#xff0c;前端攻击&#xff0c;跨域 cookie session jwt相关 前端优化方式 Turbopack WebComponentes6的新特性 B…

TRT4-trt-integrate -self-driving道路分析

1#先看ONNX 查看大概结构 首先我们来看一下这个onnx&#xff1a; 可以看到这是一个全卷积网络&#xff0c;因为输入输出的宽高都一样 后来的这里是加入了softmax&#xff0c;所以获得的是概率值&#xff0c;所以最终的输出output是1*512*596*4的概率值。仅仅是不确定四个通道代…

关于生产企业原材料的订购与运输问题

之前学校培训时候练习过的数学建模练习题&#xff0c;发出来分享一下~

《C++ Primer》第3章 字符串、向量和数组(一)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 3.1 命名空间的using声明&#xff08;P74&#xff09; 作用域操作符 :: 表示从左侧名字所示的作用域中寻找右侧名字&#xff0c;因此 std::cin 的意思就是使用命名空间 std 中的 cin 。 为了方便并安全地使…

JAVA -华为真题-分奖金

需求: 公司老板做了一笔大生意&#xff0c;想要给每位员工分配一些奖金&#xff0c;想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序&#xff0c;每个人随机抽取一个数字。按照工号的顺序往后排列&#xff0c;遇到第一个数字比自己数字大的&#xff0c;那么&#xf…

【IoT】生产制造:锅仔片上机做 SMT 加工吗?

目录 简介 锅仔片 简介 由于最近做产品用到了锅仔按键&#xff0c;由于单品用量过多&#xff0c;但是成品锅仔按键价格又太高&#xff0c;不适合量产。 这个时候就想到了锅仔片&#xff0c;问题又来了&#xff0c;锅仔片是否可以上机呢&#xff1f; 答案是肯定的。 锅仔片…

Pytest系列-使用自定义标记mark

简介 pytest 可以支持自定义标记&#xff0c;自定义标记可以把一个 web 项目划分为多个模块&#xff0c;然后指定模块名称执行 Pytest 里面自定义标记 用法&#xff1a;将pytest.mark.标记名称 放到测试函数或者类上面 使用&#xff1a; 执行时加上 -m 标记名 进行用例筛选…

K8S:Yaml文件详解及编写示例

文章目录 一.Yaml文件详解1.Yaml文件格式2.YAML 语法格式 二.Yaml文件编写及相关概念1.查看 api 资源版本标签2.yaml编写案例&#xff08;1&#xff09;相关标签介绍&#xff08;2&#xff09;Deployment类型编写nginx服务&#xff08;3&#xff09;k8s集群中的port介绍&#x…