数据结构之并查集

本文介绍了并查集这一数据结构,包括其用于判断元素集合关系及合并操作的基本原理。通过树结构和数组实现,并查集可以高效地进行查找和合并操作。文中详细解释了路径压缩优化方法,以降低查找时的复杂度,提高效率。此外,还提到了根据树的大小和高度进行合并的策略,以及在实际应用中的示例。
摘要由CSDN通过智能技术生成

我是自动化专业的应届研究生,最终拿到了tplink、华为、vivo等公司的ssp的offer,分享自己学习过的计算机基础知识(C语言+操作系统+计算机网络+linux)以及数据结构与算法的相关知识,保证看完让你有所成长。
欢迎关注我,学习资料免费分享给你哦!还有其他超多学习资源,都是我自己学习过的,经过过滤之后的资源,免去你还在因为拥有大量资源不知如何入手的纠结,让你体系化学习。
在这里插入图片描述
并查集是一种用来表示集合的数据结构,表示某个元素是否是集合中的一份子,只要有两种操作,一种是查找,找出两个元素a和b是否为同一个集合之中;另一种操作就是合并操作,将两个不在一个集合的元素a和b合并到一个集合中。

为了能够实现这种数据结构,可以使用树,通过判断两个元素a和b的树根是否相同,就可以判断是否是在一个集合之中,通过将b所在的树合并到a所在的树就可以完成两个元素合并到一个集合之中。

我们可以用数组来表示这种树的结构,比如以S为数组名,然后S[a]和S[b]的值就是父节点,当值为-1或者超出数组范围的值用来作为树的根。

初始化为下图所示的集合,每个元素都是自己一个集合。

在这里插入图片描述
假如把3和4合并到一个集合,只需把S[4]=3,相当于把4作为了3的一个子节点。
在这里插入图片描述

那么查找i节点的所在集合的根的过程就是寻找S[i]是否等于-1,如果等于-1,说明就是i所在集合的根,如果S[i]!=-1,而是等于a,那么就继续寻找S[a]的值,直到等于-1.

int find(int *A,int d)
{
   
  if(A[d]<=0)
  {
   
    return d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值