数据结构--并查集

1 并查集介绍

1.给定N个元素;
2.开始时每个元素位于独立的集合中(即该集合只包含当前元素),当它们之间具有某种关系的时候,按照一定顺序,将位于同一组的所有元素进行合并。
3.利用并查集可以查找到某个元素位于哪一个组中,或者可以查找一共有多少个组。
应用场景:当有一组集合,当这些集合具有某些关系时,就需要对这些集合进行合并。
4.根据并查集:我们可以知道任意两个元素是否具有某种关系(如1和2是朋友,2和3是朋友,则1,2,3位于同一组,就可以知道1和3是否是朋友)。
例如:当N=10时,
(1)给定10个元素0,1,2,3,4,5,6,7,8,9;
(2)开始时每个元素位于独立的集合中,则可以用一个数组,这些元素为数组的下标,因为每个元素位于独立的集合,也就表示刚开始时一共有N=10个集合,每个集合有一个元素,我们可以将数组初始化为-1,表示对应组里面只有一个元素。
这里写图片描述
(3)若这些元素具有如下关系,有3个不相交的集合:{0,6,7,8} ,{1,4,9},{2,3,5}
这里写图片描述
(4)将这些集合里面的元素两两进行合并。
例如0和6位于同一组,我们可以将并查集看成树状结构,让一个数作为孩子,让另一个数作为根,孩子里面存放父亲的下标。例如可以让0为根,6去做孩子,并且将下标为6的值加到下标为0的值上去,并让下标为6的位置存放0,则0里面存放的数据就变为-2(-1+(-1)=-2);
并且将两个数进行合并时,先要判断这两个数的根是否相同,如果相同说明已经在同一组里,就可以直接

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值