zoukankan      html  css  js  c++  java
  • 伸展树 Splay Tree

    Search Tree

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

      

     

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

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

     

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

     

     分析下最坏情况:

     



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

      

     第一只眼睛:

      

     第二只眼睛:

     

     感受点睛之笔的魅力:

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


     分摊性能:

      


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

     

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

     


    算法实现:

      Splay

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

      

     splay伸展算法:  

     

     总的伸展算法如下所示:

      


      伸展树的查找操作:

     伸展树的插入操作:

      

    伸展树的删除操作:

      


    伸展树的综合回顾:

      

    陈小洁的三只猫
  • 相关阅读:
    webpack指南(四)shimming
    webpack指南(三)缓存
    webpack指南(二)code spliting+懒加载
    webpack配置篇
    React组件setState
    React 生命周期
    React学习随笔
    @vue/cli 4.0+express 前后端分离实践
    @vue/cli 4.0.5 学习记录
    VMware Workstation 与 Device/Credential Guard 不兼容
  • 原文地址:https://www.cnblogs.com/ccpang/p/11565986.html
Copyright © 2011-2022 走看看