数据结构系列-10 并查集(union find)

1.什么是并查集?

并查集(union find)是一种用于跟踪元素的数据结构,它通过一个或者多个不相交的集合来跟踪元素。主要支持两种操作查找find合并union

并查集的使用过程,如果把集合比做团伙,两个元素可以组成小团伙,小团伙可以吸收其他小团伙或者没有团伙的元素组成大团伙,大团伙也可以这样。一直到集合中所有元素,小团伙,大团伙都组合成一个大集合

这个过程中我们可以知道两个元素是否再一个团伙。避免重复组合。a b c ,e f两个集合中,如果c 和 e 结合,则  a b c d e组成集合

2.应用:克努斯卡尔最小成成树算法。

  1. 图中所有点都,视为并查集元素;所有边(有权)都视为合并操作。
  2. 按照权的顺序排序每条边。依次执行合并操作
  3. 如果边上的两个元素,再不在一个集合中,合并两元素所在的集合(单个元素可以视为自己为一个集合)。
  4. 如果边上的两个元素,已经再同一个集合中,则这条边舍去。(再同一个集合中的元素,如果再相连就会形成环,不符合生成树)
  5. 最终所有没有舍弃的边,就组成最小生成树

参考演示: 最小生成树算法演示_bilibili

通过上面的演示,能更好的理解什么是并查集,和并查集的用法

3.如何创建并查集

首先需要在元素和整数之间[0,n),简历一个映射关系

数组下标,代表元素,值代表父元素(组),开始时,父元素就是下标自己。

注意,本步骤并非必须,但是它可以帮助我们构建一个基于数组的并查集

 4.合并操作

查找,为了查找某个节点,不断查找节点的父节点,一直找到根节点(父节点指向自己)

为了将两个元素合并,只要找到这两个元素的根节点,如果根节点不同,就将其中一个根节点指向另外一个节点的根节点。通常将元素少的组合并入元素多的组。

5.注意:

  • 对于并查集我们通常不做 分开(un-union)操作
  • 组的数量等于根节点的数量。并且,组的数量只会减少,不会增加

6.并查集路径压缩(再寻找某个元素的根节点时执行)

  1. 找到某个元素的,根节点。
  2. 它所有父节点的,以及它自己的父节点都设置成根节点。

7. go语言代码实现

datestruct: 数据结构go语言实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值