并查集结构

并查集

并查集是一种树型的数据结构,用于处理一些不交集的合并及查询问题
并查集主要包含以下几种基本操作:

1、建立新的并查集
2、把元素x和元素y所在的集合合并,要求x和y所在的集合不相交,如果相交则不合并
3、找到元素x所在的集合的代表,该操作也可以用于判断两个元素是否位于同一个集合,只要将它们各自的代表比较一下就可以了

看不懂?如图所示:在这里插入图片描述比如说找D和E是不是存在于一个集合中:从D、E上溯到顶。发现都属于A,则存在于一个集合中。

将A、H集合合并:
在这里插入图片描述
但是并查集也有两种优化措施:按秩合并与路径压缩。

按秩合并

按秩合并是指总是将更小的树连接至更大的树上。因为影响执行效率的是树的秩(深度),更小的树添加到更深的树的根上将不会增加秩除非它们的秩相同。当两棵秩同为r的树联合时,它们的秩r+1
在这里插入图片描述

路径压缩

路径压缩就是指:在Find过程中,递归改变每个节点的根结点,使得该节点指向最终节点。
在这里插入图片描述
这样以后查询就方便多了。

    //在路径上的每个元素都直接指向根元素
	public int find(Node p) {
        if (p == p.next)
            return p;//找到自己了,返回头结点
        p.next = find(p.next);
        //在路径上的所有p 都会找到p.parents
        return p;
    }

当然也可以用map来表示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值