平衡树(Splay) 服务:第一弹——旋转的艺术

平衡树(Splay) 服务:第一弹——旋转的艺术

0.前言

本蒟蒻前不久刚学SPLAY,有了一点心得,想要巩固下来。同时也觉得网上的神犇们实在太强了,有的内容并不能很好的让我这样的蒟蒻理解,因此便有了我这篇RBQ级服务的博客。我的splay是看自有风月马前卒学的,因此部分代码可能有些相似。自有风月马前卒是一位高产的神犇,强烈推荐大家看他的博客

1.引入:何为平衡树

平衡树,大家一定都听说过(毕竟没听说过也不会来找Splay博客),那么,平衡树到底是怎么回事呢?就让小编一起带大家来看看吧

平衡树是一种 二叉搜索树(BST) ,它拥有二叉搜索树的重要性质:对于BST的一个节点,它的左子树都比它小,右子树都比它大。BST因为有了这个性质,就可以以 O ( m h ) O(mh) O(mh)的复杂度方便的实现插入,删除,查询前后驱,排名,k小值等功能。没错,正是平衡树常用的功能。好的,BST取代了平衡树,本篇完————

怎么可能???

BST的性质可以理解为,它是一个中序遍历为有序数列的二叉树,而我们知道,对于一棵树,只知道中序遍历是无法确定它的形态的,因此,插入顺序的不同会导致BST形态的不同。在极端情况下,它会退化成一条链,这时使用BST的复杂度就退化成了 O ( m n ) O(mn) O(mn)。(ps:vector在一般情况下也能以远低于 O ( m n ) O(mn) O(mn)的复杂度完成以上操作)。

那该怎么办?用vector(

为了拯救Oier和BST,平衡树出现了。考虑到BST之所以会退化,是因为它在可能会变得非常“窄长”,于是,我们可以使用人为方式让BST保持宽宽扁扁的“好身材”,来保证复杂度为 O ( m log ⁡ n ) O(m\log n) O(mlogn)这就是平衡树的由来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值