并查集

并查集

概念:

              并查集是一种用来管理元素分类情况的数据结构。并查集可以高效的进行合并和查询操作,但是却无法进行分割操作。

既然是数据结构,自然有逻辑结构和存储结构。

逻辑结构:  树

存储结构: 顺序存储的结构,方便操作。

应用:

1. 基本应用:

             并查集最基础的应用就是在大量的数据中,进行分类。给定任意两个元素,可以高效的判断是否为同一类。参考:HDU1213, POJ1611

2. 带权并查集:

             在第一种基础操作上,有些题中,会出现一些元素直接有不同的关系,比如A, B, C的关系,A>B, B>C, 那么就可以退出来A>C。类似这样的。这时候单靠一个简单的并查集不能完整表示出所有元素的关系,所以我们需要另开一个sum[ ]数组储存某元素与其根结点的距离,来表示关系。这样就会涉及到合并操作之后,对于sum数组的更新问题,由于并查集记录的只是自己的父亲,所以想在合并的时候进行更新是行不通的,那么就只能在查询过程中进行更新了,一边查一边更新sun数组,这样保证我们用到的都是最新的结果。这里需要掌握一个距离更新算法。

               这种情形下,还算是中规中矩的并查集考察,就是稍微复杂一点的并查集,做题时需要想到带权并查集就好了。参考:HDU3038,POJ1182

3.灵活应用并查集:

             这个就是比较难的了,一般会在第二种应用或者第一种应用之上,加上一些技巧,甚至是和其他算法结合在一起的综合题,总之题可以非常难。比如什么倒着来了,暴力枚举了,这种题就只能靠自己的经验和聪明才智了,多想想怎么往并查集上转化。参考:POJ2912,ZOJ3261

算法优化:

           并查集如同二叉搜索树一样,存在退化现象,会使得效率下降。极端情况下(一条链表),就和正常的查询没区别了。首先会想到合并时,总是将高度低的树接到高度高的上,然而并不是最好。最好的做法是路径压缩算法,在查询过程中,将所有结点顺便全部接到根结点上,这样可以大幅提高并查集的效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值