【算法】并查集 Union Find

并查集 Union Find(典型应用是有关连通分量的问题,Union(x,y)合并x,y为同一个祖先,Find(x):找x的祖先)

并查集是一种数据结构,和树比较类似,只不过它跟树是相反的。在树这个数据结构里面,每个节点会记录它的子节点。在并查集里,每个节点只会记录它的父节点。并查集的典型应用是有关连通分量的问题,并查集的方法就是对满足条件的相关元素进行合并!!!合并的这个过程就是用到union和find两个方法。 Union(x,y)合并x,y为同一个祖先,Find(x):找x的祖先(必须要注意的是,祖先(根节点)我们也是用索引来代替表示的,可以这样理解,因为看根节点是什么就是看数组对应索引位置上存的数字,然而数组索引位置存的数字的意义也是代表索引。还有就是不同的元素(节点)我们都是用一维索引去代表,即知道了某个索引我就知道了是指的哪个元素!):x=root[x],当数组索引位置存的数字和索引相同时,这个时候就相当于找到了祖先。

Union Find算法的模板性特别强,做并查集的题一定要用到的数据结构就是数组!!! 数组里面不同索引位置存放的是对应元素的根节点(准确来说是根节点的索引),数组的不同索引代表不同的元素,数组的长度和元素个数相同。在做题之前,要先对每个数字的根节点进行初始化即变成元素的本身,初始化的方法就是数组的某个索引上的值就等于这个索引本身。如果要看某两个数字是不是连在一起的,则去看这两个元素对应的根节点是不是一样。在找某一个元素的根节点时,如果根节点对应的数组存放的数字和索引的值不相等时,则要接着数组的数字往下找,直到索引和数字相等时说明根节点就是这个数。(这样做的原因这是 因为一颗树里只会有一个根节点! 而根节点的根节点就是它本身)。如果说要把某两个元素连起来,则将其中一个元素的原根节点的根节点改成这另一个元素的索引就可以了,这样做的原因是因为根节点(数组索引位置存放的数)和索引不一样时会接着往下找真正的根节点,直到数组索引位置存放的数和索引相同时,那个根节点才是原来那个数真正最终的根节点!

Union Find算法里有两个方法,一个叫Union即合并两个元素为同一个根节点,一个叫Find即找到某个元素的根节点,这两个方法是同时出现的。在下图中左边的根节点是1,右边的根节点是5,它们两的根节点是它们本身。这时候用一条线将1和5相连,则1和5的根节点合并为同一个,这时我们可以把1和5的根节点都当做1(当然也可以都当做5)。Union(1,5)就是把1和5合并为同一个根节点。Find(6)就是去找6的根节点,此时6的根节点是1。
在这里插入图片描述
在这里插入图片描述
举个生活版的并查集例子:

在这里插入图片描述
模板:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值