首页 > 其他分享 >【数据结构 | 并查集】维护元素分组信息,支持高效合并集合、查询元素所在集合

【数据结构 | 并查集】维护元素分组信息,支持高效合并集合、查询元素所在集合

时间:2024-04-09 20:00:52浏览次数:10  
标签:查集 int 元素 find parents 集合 节点

文章目录

并查集

概述

并查集

并查集(Disjoint Set Union,简称并查集),也叫不相交集合(一系列没有重复元素的集合),是一种用于处理集合的数据结构。

并查集主要专注于两个核心操作:

  1. 查找(Find)
  • 查找操作可用于确定一个元素属于哪个子集。
  • 通常返回一个代表该子集的元素,称为代表元素(或者说根元素)。
  1. 合并(Union)
  • 合并操作用于将两个子集合并成一个。
  • 将两个元素连接到一起,那么这两个元素所在的集合就合并为一个集合,此时的操作是先找到这两个元素的代表元素,再将某个子集的代表元素连接到另一个子集的代表元素上。

引入

并查集是为了有效地解决集合合并和查询问题而设计的数据结构。

我们来看这样一个问题,假设现在有n个村庄,有些村庄之间有连接的路,有些村庄之间并没有连接的路:

村庄

现在需要设计这样一个数据结构,能够快速执行两个操作:

  • 查询2个村庄之间是否有连接的路
  • 连接两个村庄

此时,我们就可以利用并查集来解决这个问题,两个核心操作如下:

  1. 查询操作: 使用并查集的Find操作,可以迅速确定两个村庄是否属于同一个集合,即它们之间是否有连接的路。如果两个村庄具有相同的代表元素,它们在同一个集合中,表示它们之间有连接的路;如果代表元素不同,则表示它们之间没有连接。

  2. 合并操作: 使用并查集的Union操作,可以将两个村庄所在的集合合并为一个集合,表示它们之间建立了连接的路。通过将一个集合的代表元素链接到另一个集合的代表元素上实现。

在这里,每个村庄对应一个并查集的节点,最初每个节点自成一个集合。如果采用数组、链表、平衡二叉树或者集合(Set)来实现,查询和连接的复杂度都是O(n),使用并查集的复杂度是O(logn),可以优化至O(α(

标签:查集,int,元素,find,parents,集合,节点
From: https://blog.csdn.net/m0_62999278/article/details/137564625

相关文章

  • 【每周例题】力扣 C++ 移除元素
    移除元素题目移除元素 思路分析1.涉及到容器,那么就很直接的想法,遍历容器,找出与val相同的数,移除,然后利用函数输出长度与移除后的数组2.移除部分我们使用指针去处理,用指针遍历数组,符合移除条件的利用erase函数移除注:这里使用到了一个万能头文件,参加蓝桥杯的同学可以试试运用......
  • 前端-题目集合
    1.前端开发:JS事件循环机制  事件循环什么是事件循环(EventLoop)?众所周知,Javascript是一门单线程的语言,单线程即同一时间只能做一件事,但这并不意味着JavaScript在执行代码的过程中就会一直阻塞,而解决单线程不阻塞的这个机制就叫做事件循环(EventLoop),也就是......
  • CF455C. Civilization-并查集
    2100分的并查集(x)link:https://codeforces.com/contest/455/problem/C给一张无向森林,有若干次操作,有两种:询问\(x\)所在树的直径合并\(x,y\)所在的连通块,使得合并后的直径最小\(n,m,q\leq3\times10^5\)处理出每个连通块的直径,考虑如何合并两个连通块?设原来的直径分别......
  • AI进行元素识别和文字识别实现UI自动化测试
    【背景】一般移动端APP会有页面元素属性,比如:ID,ClassName,Text等,可以方便定位需要操控的元素控件。而这类的UI控件识别框架的结果输出往往依赖于开发同学在代码中对控件元素进行合理有效的命名,且一旦这些控件元素被混淆后就很难进行有效的元素定位。为了降低每个版本UI元素的层级等......
  • 移除链表元素(虚拟节点法、力扣203)
    题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=......
  • html 元素的 onEvent 与 addEventListener
    对于html元素的onEvent,我们想要给其添加functionhandler(){},有时候会弄不清楚到底是添加<divonEvent="handler">还是添加<divonEvent="handler()">下面两段等价的代码说明了问题<inputtype="file"onchange="showFile(this)"><script>......
  • CSS——解决CSS元素之间的空白问题
    在CSS中,元素之间的空白问题指的是元素之间可能存在的空白间隙或间距,这些空白可能是由于元素之间的换行、空格或制表符等造成的。这些空白可能会影响页面的布局和样式。常见的解决方法:1.使用font-size:0将父元素的字体大小设置为0,可以消除内联元素之间的空白。.parent{......
  • 元素共鸣:深层次的唤醒
    描述在提瓦特大陆上,有N座由原石构成的神秘石柱,它们依次排列,编号为1,2,3,…,N。每座石柱都蕴含着不同程度的元素能量,这种能量的强度可以用一个整数来量化。冒险者们面临着一个更加艰巨的任务:为了唤醒深层次的神之眼,他们不仅需要将这些原石石柱合而为一,而且在这一过程中,每一次移动......
  • Set集合以及其中实现类的底层原理分析
    Set集合的特点无序:存取顺序不一致如存入张三、李四、王五。而遍历获取到的是李四,张三,王五不重复:可以去除重复无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素set集合的实现类HashSet:无序、不重复、无索引LinkedHashSet:有序、不重复、无索......
  • playwright-元素定位(一)
    #同步模式fromplaywright.sync_apiimportsync_playwright#导入同步模块#创建一个Playwright的管理器对象withsync_playwright()asp:#等同于p=sync_playwright()#基于p创建一个浏览器对象(默认谷歌),slow_mo全局等待1sbro=p.chromium.launch(headless=Fal......