【重拾算法】并查集

本文深入探讨了并查集这一图论算法,包括其基本概念、如何通过实例理解并查集、如何检测环的存在,以及如何通过路径压缩优化查找效率。通过C++和Go语言的代码实现,详细展示了并查集的操作过程。
摘要由CSDN通过智能技术生成

一、什么是并查集

并查集是图论中的一种算法

集就是集合,因此可以看出并查集与集合操作有关

并查集内有两个重要的操作:合并(union),查询(find)

合并操作是用来将不同的集合合并为一个集合,查询操作用来查询某个元素所属的集合

二、举个栗子

1. 栗子

假设现在有六个元素,代号分别为1、2、3、4、5、6

他们的集合关系如下,{1, 2}, {1, 5}, {3, 4}, {6, 2},在同一花括号内表示处在同一集合中

问元素[1, 3],元素[2, 5]是否在同一集合内

思路:根据提供的集合关系,将同一集合内的元素连在一起,每个集合选取一个根节点作为集合的代表,若两个元素所处集合的根节点相同,则表示这两个元素在同一集合内

逐步建立他们的集合关系如下

初始时,每个元素都是一个集合,他们的根节点都是自己,例如:parent[1] = 1

合并元素1和元素2,此时根节点分别为1,2,任意选取元素1作为合并后集合的根节点

将元素5与元素1合并到一个集合中,根节点分别为1,5,任意选取元素5作为合并后集合的根节点

 合并元素3和元素4,根节点分别为3,4,任意选取元素3作为合并后集合的根节点

合并元素2和元素6,根节点分别为5,6,任意选取元素6作为合并后集合的根节点

集合关系就建立完毕啦!

这时候开始判断元素所属集合是否相同

[1, 3]

元素1所处集合的根节点是6,元素3所处集合的根节点是3,因此他们属于不同的集合

[2, 5]

元素5所处集合的根节点是6,元素2所处集合的根节点也是6,因此他们在同一集合内

2. 检测环的存在

并查集还可以用来判断是否有环的存在

例如,我们在原有集合的基础上,再添加一条关联关系{1, 6}

元素1所在集合的根节点是6,元素6所在集合的根节点也是6,他们在同一集合中,因此若继续添加关联关系则会导致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值