并查集原理及优化

解决的问题:查询两个样本是否在同一个集合中,并且合并两个样本集合。是上述两个问题的复杂度都是O(1)

原理

检查的主旨在于看最头上是不是一个元素

合并的主旨在于改变少的头的指向

对n个节点设置n个对应的指针,初始化时每个指针指向自己。

 检查两个元素是否属于一个集合:通过将两个原元素往上指到不能再往上,如果两个元素的头头不是一个元素那么这两个元素不属于同一个集合。

以现在的a,b为例:a往上到不能再往上是a,b往上到不能再往上是b;

合并两个元素所在集合:将两个元素往上到不能再往上,将元素个数少的头挂在元素个数多的头底下.

以当前情况为例,合并b所在集合和e所在集合 ,将少的顶部(e)挂在多的顶部(a)底下。

 并查集的优化:

在查询往上找头时,以下图的从Y向上找a的过程为例。

 再向上寻找的过程中,可以顺便将路过的各个节点改向直接指向a

这样做的目的在于后续进行向上找头时缩短时间。

 代码实现时:

可以建立哈希表:

第一张是节点与它指向的父节点的hashmap

第二张:节点如果是头节点,那么它在哈希表里对应的值是该集合的大小。如果不是头节点,那么它对应的值是0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值