并查集

并查集(union-findsets)是一种数据结构,其主要用于处理一些不相交集合的合并问题。**一些常见的应用场景,求连通子图,求最小生成数算法和求最近公共祖先(LCA)**等
并查集问题往往是只考虑连通性的问题,典型问题如leetcode 990题等式方程的可满足性。这种数据结构主要支持合并和查询元素是否在同一个集合之中,底层结构是数组或者是哈希表。用于表示结点指向父节点,初始化是指向自己。
合并就是把一个集合的根节点指向另一个集合的根节点,只要根节点一样,就表示是同一个集合。
路径压缩和按秩合并
路径压缩分为:隔代压缩和完全压缩,其发生在查询过程中。
隔代压缩的代码: p a r e n t [ x ] = p a r e n t [ p a r e n t [ x ] ] parent[x] = parent[parent[x]] parent[x]=parent[parent[x]];
完全压缩:需要借助递归, p a r e n t = f i n d ( p a r e n t [ x ] ) parent=find(parent[x]) parent=find(parent[x])

按秩合并是指在高度更低的树的根节点指向高度更高的根节点,以避免合并以后树的高度增加,
路径压缩和按秩合并一起使用时,难以维护秩的准确定义,但是依然具有参考价值。

时间复杂度接近与 o ( 1 ) o(1) o(1)
一般二者只选择其一。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值