王道考研机试学习——并查集

并查集是一种数据结构,用于表示和操作集合,常见于图论问题。本文介绍了并查集的基本概念、操作,包括查找元素是否属于同一集合及合并集合的方法。还讨论了并查集的优化策略——路径压缩,以避免树的退化,提高查找效率。并通过王道OJ考研机试的例题5.1和5.2,解析了如何应用并查集解决实际问题。

什么是并查集

集合是图论问题中的一种常见的数据结构。
并查集是一种数据结构,用来表示集合信息,常用来实现确定某个集合中含有那些元素判断某两个元素是否处于同一个集合集合中元素的数量问题
使用树结构来表示一些集合,且使用数组存储。
我们在数组单元i中保存结点i的双亲结点编号,如果该结点是根节点,则保存信息为-1。

并查集相关操作

查找两个元素是否处于统一集合,只需判断两个元素在数组单元中的根节点是否为同一个结点。
合并两个集合,只需要将一个集合的根节点(本来是-1)设置成另外一个集合根节点的下标即可。
查找某个节点的根节点,从该结点开始向上查找双亲结点,直至tree[x]=-1的x,这个x就是该结点的根节点。
求某个集合所含的元素个数.可以通过结构体来实现,也就是第二个例题。

并查集的优化

在两棵树的合并的时候如果不加约束,极端情况下可能造成一种斜树的情况,会使得查找效率降低。我们称这个为树的退化,
为了避免树的退化,我们在合并两棵树的时候就需要加入一定的限制条件从而保证树的高度尽可能的小。为了达到这个目的,我们在查找某个特定结点的根节点时,同时将其与根节点之间的所有结点都直接指向根节点。我们成为路径压缩
在这里插入图片描述
优化代码

//路径压缩后的查找情况
int findRoot(int x) {

    int tmp=x;  //tmp用于x的回溯.
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值