并查集及其应用

【数据分享】2012-2022年全国及各城市POI(兴趣点)数据(超20G) POI(一般作为Point of Interest的缩写,也有Point of Information的说法),通常称作兴趣点,泛指互联网电子地图中的点类数据,基本包含名称、地址、坐标、类别四个属性;随着互联网电子地图服务与LBS应用的普及,POI无论从概念范畴,还是从信息纵深都有了长足发展,互联网各个风口或火山口都和POI有一定关系,如O2O、电商、社交、互联网金融、共享经济等。 阅读详情

并查集


  并查集(Union-Find)是解决动态连通性问题的一类非常高效的数据结构。
  这里以整数 0~9 表示图中的10个点,然后给出两两连通的数据如下:[(4, 3), (3, 8), (6, 5), (9, 4), (2, 1), (8, 9), (5, 0), (7, 2), (6, 1), (6, 7)]。如何让计算机读取这些数据来构建一种数据结构(合并连通点),然后在这种数据结构上高效的做出对某个点对是否连通的判断(查询连通性)。这也就是并查集名字的由来了。为了实现上面所描述的功能,一个简单的思路就是分组。也就是说,我们可以把相互连通的点看成一个组,如果现在查询的点对分别在不同的组中,则这个点对不连通,否则连通。下面我们先来简单分析一下这种操作的具体过程,分“并”和“查”两个方面来分析。为了方便描述,我这里先举一个例子:比如上图的10个点,现在就令每个点的值为其初始组别,我们可以得到下面这个表:

element0123456789
parent0123456789

现在,“并”的操作可以这样来描述:观察第一个点对(4,3),于是先找到点4和3,发现所在组别不一样,再将点4和3的组别都变成3(当然都变成4也行,这个随意设计),然后就产生了如下的表:

element0123456789
parent0123356789

而“查”的操作其实就是“并”操作的第一步:找到点对中两个点所在的组别,看是否相同。也就是说,并查集的两类基本操作中,都涉及了“根据点找组别”的过程,因此我们先给出一个高效的“查”的算法。我把它叫做Quick-Find 算法。
例题
  输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u < v。

class Solution {
    public int[] findRedundantConnection(int[][] edges) {
        int[] re=new int[2];
        DFS dfs=new DFS(edges.length);
        dfs.union(edges[0][0]-1,edges[0][1]-1);
        for(int i=1;i<edges.length;i++){
            if(dfs.find(edges[i][0]-1)==dfs.find(edges[i][1]-1)){
                re[0]=edges[i][0];
                re[1]=edges[i][1];
            }else{
                dfs.union(edges[i][0]-1,edges[i][1]-1);
            }
        }
        return re;
    }
}
class DFS{
    int[] parent;
    public DFS(int n){
        parent=new int[n];
        for(int i=0;i<n;i++){
            parent[i]=i;
        }
    }
    public int find(int x){
        if(parent[x]!=x){
            parent[x]=find(parent[x]);
        }
        return parent[x];
    }
    public void union(int p,int q){
        parent[find(q)]=find(p);
    }
}

此题使用并查集解决。对于同一棵树的所有节点来说,都拥有共同的祖先节点。因此,判断冗余连接的条件即为,判断新加入的边,两个节点是否有共同的祖先。
(1)如果有共同的祖先,则说明这条边是冗余的边
(2)如果没有共同的祖先,则说明这两条边并未加入树中,因此进行合并操作
循环边的记录,获取最后出现的冗余边,就是答案。

Android16 自定义HAL层适配一些VINTF和SELINUX问题修改 在RK里面一般权限矩阵在/rockchip/common/manifests/目录,我这版Android16的代码比较特殊,这里重点修改/device/rockchip/rockchip_generic/manifests/frameworks_compatibility_matrix.xml这个文件,不同的版本注册方式不同,在。hal_ruip_default.te,hal_ruip.te,attributes文件。拓展策略的方式添加,但是在Android16里面发现用不了。发现HAL层服务注册成功了。 阅读详情

相关推荐

为什么你的XGBoost多分类效果不如预期?可能是这5个参数没调对

本文深度剖析了XGBoost模型在处理多分类问题时效果不佳的五大关键参数陷阱。针对多分类问题的独特性,文章提供了max_depth、learning_rate、采样参数及正则化参数等核心参数的量化调整策略与诊断方法,帮助开发者精准调优,有效提升模型在各类别上的均衡性能与泛化能力。

weixin_29182481的博客 296

万字长文,并查集(Union Find)精讲及应用实例

并查集(Union Find):一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。不交集指的是一系列没有重复元素的集合。合并(Union):将两个集合合并成一个集合。查找(Find):确定某个元素属于哪个集合。通常是返回集合内的一个「代表元素」。简单来说,并查集就是用来处理集合的合并和集合的查询。并查集中的「集」指的就是我们初中所学的集合概念,在这里指的是不相交的集合,即一系列没有重复元素的集合。

白话机器学习 8502

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6456

进阶数据结构——并查集

1. 核心总结• 并查集的核心是通过树形结构和优化技术实现高效的集合管理。• 高阶问题的突破口通常在于带权并查集或动态并查集。2. 学习建议• 分类刷题:按问题类型集中练习(如连通性问题、动态连通性、分组问题)。• 理解优化技术:掌握路径压缩和按秩合并的原理与实现。• 手写模拟过程:在纸上画出树形结构,加深直观理解。!!

ycs66的博客 1561

嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南)

本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。

milk5的博客 900

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文详细介绍了如何使用Simulink搭建交流异步电机矢量控制模型,涵盖系统架构设计、关键模块实现、PI调节器参数整定及仿真分析等核心内容。通过实战指南和完整仿真文件,帮助读者掌握矢量控制技术,提升电机控制系统的设计与调试能力。

n4o5p6q7r的博客 250

并查集及其简单应用

图论 : 并查集

小青菜的博客 1336

YOLO26 无损剪枝:稀疏训练 + 结构化通道裁剪

YOLO26 无损剪枝链路:YOLO26s (7.2M) → 稀疏训练 30 epoch (L1 on BN gamma, lam=0.01) → 阈值剪枝 50% (gamma<quantile(0.5)) → 结构化重建 Conv+BN → 微调 10 epoch (lr=1e-4) → YOLO26n (1.9M, mAP50 0.808, 仅降 0.6%)。核心贡献:稀疏训练让 BN gamma 趋向二元分布 (近 0 或近 1), 剪枝阈值可直接取 median 自动 50% 压缩。

m0_64661770的博客 263

并查集实现及其应用

先看看度娘给出的定义吧: 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。 总结一下: 如果我

dtxew love c++ 1858

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2399

注意力机制篇 | YOLOv8改进之在C2f模块添加EMA注意力机制(附2种改进方法)

EMA(Exponential Moving Average)注意力机制是一种用于增强模型性能的注意力机制,它通过对模型的特征图进行加权平均来提取更有用的特征信息。具体来说,EMA注意力机制通过引入一个权重因子来调整特征图中每个位置的重要性,从而使模型能够更好地关注重要的特征。🌈

小哥谈 4180

并查集的模板及其应用

并查集有两个步骤: 将两个集合合并 询问两个元素是否在一个集合当中 如果用暴力进行上述操作的话。我们可以用一个数组存储每个元素属于哪个集合,比如对第二个操作来说 belong[x]=a;表示x属于a这个集合,用if(belong[x]==belong[y])来判断两个元素是不是属于同一个集合,时间复杂度为O(1)。 如果我们用暴力来合并两个集合,时间复杂度就相对高。 比如,我们要合并的第一个集合有1000个元素,要合并的第二个集合有2000个元素。要么把属于这1000个元素的编号改成另一个集合,要么把

m0_54136420的博客 204

CEEMDAN算法及其应用

本博文主要介绍CEEMDAN算法的原理及其在信号去噪方面的应用

总结论文中的算法并给出论文的复现代码 6万+

一口气——并查集及其在Kruskal算法的应用

本文记录下树结构下的并查集和其在Kruskal计算最小生成树算法中的应用 一、何为并查集   并查集,顾名思义对数据进行合并和查询,因为是树结构的应用,合并即将两个数据安置在树中,查询即查询某个数据的祖宗结点。其意义在于将许多看似不相关的数据通过一些线索分组,下面举个例子。   心理学中有个著名的六度分离理论,“你和任何一个陌生人之间所间隔的人不会超过五个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”   现有11个人,这11个人编号1~14的数据,有如下10条线索:1、2彼此认识;3、4彼此认识

小龙不是蛇的博客 510

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

并查集及其典型应用

文章目录1. 图的连通性问题2. 并查集的原理简析2.1 初始化集合S2.2 Union(并)2.3 Find(查)2.4 通过读入直接相连的点对来更新S,并统计每个联通块的节点数目3. Python实现参考资料 1. 图的连通性问题   (1)在地图上有若干城镇(点),已知所有有道路直接相连的城镇对。要解决整幅图的连通性问题。   (2)随意给你两个点,让你判断它们是否连通;或者问你整幅图一共有...

kabuto_hui的博客 1399

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

并查集 (Union-Find Sets)及其应用

并查集 (Union-Find Sets)并查集:(union-find sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多。一般采取树形结构来存储并查集,并利用一个rank数组来存储集合的深度下界,在查找操作时进行路径压缩使后续的查找操作加速。这样优化实现的并查集,空间复杂度为O(N),建立一个集合的时间复杂度为O(1),N

fisher_jiang的专栏 1万+

并查集及其优化与应用

查找的效率和树的高度直接相关,所以我们每次合并的时候选择将小树作为大树的子树,这样每次合并树的高度就不会增加;存储并查集的树的高度越低那么他查找的效率也会更高,那么我们在查找的同时降低树的高度也进一步优化了。通过分析并查集的功能可知,用双亲表示法存储的树来实现并查集是最合适的;优化前该算法的时间复杂度考虑最坏的情况得到为。,优化之后时间复杂度降低到了。

a3510012的博客 249

并查集及其补集应用

提起并查集,相信各位dalao并不陌生,甚至那就2行的板子已经被你们玩烂了…… 并查集是一种树型的数据结构,它常用于处理一些不相交集合的合并及查询问题,而最常见也是最简单的问题就是找亲戚: 有1,2,3,4,5这么几个人,告诉你两个人是不是亲戚,之后询问两个人的关系。 比如知道1,3是亲戚,3,4是亲戚,起初要把每个点所在集合的代表初始化为其自身,随后合并1,3所在集合和3,4所在...

weixin_30505043的博客 163
上一篇: Spark自定义排序/分区
下一篇: Flume与HBASE、Kafka集成
K. Bob
博客等级 码龄8年 82粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值