408数据结构 并查集union操作基于rank优化后的树高和时间复杂度

并查集的rank优化,就是把几个树合并在一起并且让矮树跟着高树,这样合并之后树的高度能做到最低,查找起来就更方便(个人理解是这样的)

然后看的网课讲优化后树高不超过⌊log2(n)⌋+1

课上没讲怎么得的,说数学归纳法能推(可能确实很简单,但对我来说真的费脑子😭)这里简单记录一下我是怎么想的:

不超过⌊log2(n)⌋+1,也就是最坏的情况下树高度为⌊log2(n)⌋+1,这里的n代表的是合并后结点的总个数。

想要“最坏”,其实就是每次合并树的时候树高都会增加,不会出现矮树跟着高树,合并后树高不增加的情况。所以,我的想法就是每次进行操作的两颗树树高相同,这样保证用最少的结点合并成最高的树,达成“最坏”

但是!就是这里,我有一个点之纠结了很久,就是对新加进来的树有要求吗?新加进来的树是不是应该结点数等于树高才算是最极端情况?后来我明白了咱们讨论的所有都是基于“rank优化”,也就是所有的树都是从一个结点开始进行基于rank优化的合并,所以每次合并的等高的两棵树应该是一模一样的,这就是真正的极端情况(这里说实话我认为理解起来很别扭,但是我只能建议别钻牛角尖,这东西的实际意义和推导过程不像数学题那么清晰,大致理解一下方便记忆就可以了)

然后就是具体画图具体推演:

323ffa482ad746999ff6c68e56570c87.jpg

 最差情况树高是log2(n)+1,一般树高小于⌊log2(n)⌋+1,即向下取整即可,然后结点查找find操作的时间复杂度就是O(logn) ,完毕(这里log2(n)量级通常简写为logn,在此不多解释,网上有许多大神有相关说明)

最后,也是把自己最开始陷进去的错误思路记录一下,树高⌊log2(n)⌋+1与完全二叉树求树高的公式一样,所以最开始一直在想怎么和完全二叉树产生关联,但现在我个人认为这仅仅是推算后结果的巧合,与完全二叉树完全无关。

 

(这次这个问题真的困扰了我很久,网上也没怎么搜到相关的推导过程,不过b站的诸多视频和网课的老师给我点拨了思路,非常感谢。

另外,本人作为新人创作者,同时也是408考研大军中的一员,各位如果有任何有关408的问题都可以向我提问,评论私信都可以,我尽全力去解决,帮助大家也是帮助自己成长。)

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值