伸展树学习笔记之逐层伸展

伸展树

一. 局部性

  • Locality: 刚被访问过的数据,极有可能很快再次被访问,这一现象在信息处理过程中屡见不鲜。
  • BST: 刚刚被访问过的节点,极有可能很快再次被访问;下一个将要访问的节点,极有可能就在刚被访问过节点的附近
  • 连续的m次查找(m>>n=|BST|),采用AVL共需O(mlogn)时间

二. 自适应调整

       

对于典型的线性结构列表,所有元素按照它们之间的逻辑关系,排列成一个线性的序列。相邻的元素通过引用,确立前驱和后继关系。对任何一个元素的访问效率,将主要取决于它在这个序列中所具有的秩。

 

  • 越靠前的元素,秩越小,访问的效率越高
  • 越靠后的元素,秩越大,访问的效率越低

       

一旦有某个元素刚刚接受访问,立即将它移动到这个序列的最前端。因为根据局部性,接下来要访问的元素,很有可能就是我们刚刚访问的那个元素的。

        

经过了足够长时间的使用之后,某一时间内,被集中访问的那些元素,都会集中到这个列表的前端去,提高访问效率。

        

将BST树的画法旋转90度,在BST位于顶部的元素,访问效率相对要高,可以借助局部性,将经常要访问的元素,尽可能移送到更加接近树根的位置,也就是要尽可能地降低它们的深度

三. 旋转

3.1 之字形

栗子.......................................................................................................................

3.2 一字形

栗子.......................................................................................................................

栗子1:................................................................................................................................

  

栗子2:................................................................................................................................

栗子3:................................................................................................................................

栗子4:................................................................................................................................

四. 逐层伸展

       

访问一次结点 ,完成一次称为展开的过程

  • 节点v一旦被访问,随即转移至树根,通过zig或者zag变换
  • 自下而上,逐层单旋
  •        zig(v->parent)
  •        zag(v-parent)
  • 指到v最终被推送至根

五. 例子

step1: 需要访问333

           

step2:

         

step3:

         

step4:

         

step5:

         

step6: 最终抵达树根

         

六. 最坏情况

     

七. 插入Insert

      

八. 联合Join

     

九 删除Delete

(参考:https://web.stanford.edu/class/cs166/lectures/10/Slides10.pdf)

                                                                                            

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值