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

伸展树

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

一. 局部性

  • 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)