并查集Quick Union优化个人理解 && 并查集中集合的表示为何采用双亲表示法

思考1:并查集中树的存储结构表示为何采用双亲表示法

因为我们要不断回溯,因此不选用找双亲困难的孩子表示法;而我们还要不断合并树,故不选择合并逻辑复杂的孩子兄弟表示法。我们采用双亲表示法。

思考2:并查集的优化个人总结

优化中心思路:让树的高度尽量低,因为树越高查找的耗费的时间越多。

对于合并操作:我们希望合并之后树至少不会增高,我们有两种选择:
在这里插入图片描述

  1. 结点少的树合并到结点多的树中,这也就是基于size的优化
    • 结点少的树一般高度低于结点多的树,当然不排除高于情况
    • 但这种优化方式和路径压缩优化可以共存,因为树的结点数存放在根结点,而路径压缩优化不会改变结点个数
  2. 高度低的树合并到高度高的树中,这也就是基于rank的优化
    • rank小的树合并到rank高的树,这样rank可以不变
    • 但是它和路径压缩不能很好的共存,因为路径优化会改变树的高度,rank的维护比较麻烦

对于查找操作:我们可以利用每次查找路径的过程,降低树的高度,有两种已知的算法:

  1. 王道考研:
    在这里插入图片描述

    1. 先回溯一次找到根结点,再从头回溯一次,把路径上的结点都连接到根结点上
    2. 有限次查找后,树的高度会降为2
    3. 注意到这里是两次回溯,但它做到了一次回溯把路径上的结点全部连接到根节点上了
  2. 另一种算法:
    在这里插入图片描述

    1. 回溯过程中,每访问到一个结点,就把它连接到它父结点的父结点
    2. 有限次查找后,树的高度会降为2
    3. 是一次回溯,每次访问都只会把路径上,离根结点路径长度为2的那一个结点连接到根结点上

如有错误欢迎评论区指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值