伸展树 Splay Tree

Search Tree

  如果比喻作人,AVL树就如同那种时时刻刻小心翼翼且谨慎的类型。这一节,我们寻找一种更为宽松的准则,让我们变成潇洒的人。下面介绍这节的猪脚伸展树。

  

 

 逐层伸展: 使得v的高度逐层上升:

实例:节点上升的过程是一个不断伸展,左右摇摆的过程。

 

 一步一步往上爬这种策略,显然比较低效。哎 蜗牛好惨啊!!

 

 分析下最坏情况:

 



来看看点睛之笔:单层伸展变成双层伸展

  

 第一只眼睛:

  

 第二只眼睛:

 

 感受点睛之笔的魅力:

  调整一次之后,整棵树的树高有了本质的变化:每调整一次,树的高度竟然可以缩减一半,很快的就能变成平衡的状态,哇塞!!!


 分摊性能:

  


V的深度是奇数而不是偶数,

 

 伸展树虽然不能杜绝最坏情况的发生,但是却能有效的控制最坏情况发生的频度,从而在分摊意义下保证整体的高效率。经过双层伸展策略之后,伸展树的单层操作均可以在分摊的O(logn)时间内完成。

 


算法实现:

  Splay

在其他树的变种之中,search操作都是静态的,但是在伸展树中,search也是动态的。

  

 splay伸展算法:  

 

 总的伸展算法如下所示:

  


  伸展树的查找操作:

 伸展树的插入操作:

  

伸展树的删除操作:

  


伸展树的综合回顾:

  

陈小洁的三只猫
原文地址:https://www.cnblogs.com/ccpang/p/11565986.html