当前课程知识点:数据结构(下) > 第八章 高级搜索树(上) > (a1)伸展树:逐层伸展 > 08A1-7 最坏情况
这棵树 有do re mi fa so la si类似于
七个音符所构成的一个逐级上升的音阶
请注意 这棵树当前的形状 可以形容为是汉字中的一撇
接下来不妨假设 作为一个周期
我们就按照do re mi fa so la si的次序
来访问这个树中的各个节点
首先是do
在对它一次查找访问之后 我们将通过伸展
将它推送至树根
接下来 该轮到re
同样 在对它访问之后 我们也需要通过伸展
将它推送至树根
再接下来 该轮到的是mi
同样 在对它进行访问之后
我们也需要通过伸展使之成为新的树根
好 后续的过程类似
我们不妨直接来看一下
fa
so
la
以及最后的si
请注意 在经过了这样一轮的访问之后
这棵树的形态 又重新的成为了汉字中的一撇
刚才的那样一个访问周期
可以用类似于此的一系列快照来描述
可以看到 如果这课树的规模是n的话
那么第一个节点所需要的访问成本应该大致为n
第二个节点呢 大致为n-1
而第三个呢 是n-2
以及n-3 以及n-4
以及最终的1
概括而言 整个周期中各自访问
所对应的计算成本
是按算术级数变化的
整个周期的长度为n
因此根据我们在第一章业已掌握的技巧
可以推断出 整个周期内
所需要的计算成本累计
应该是n^2量级
这是一个什么概念呢?
如果将这个计算成本
分摊到整个周期内的n次操作
我们就会发现 每次操作的分摊成本
居然会高达Omega(n)
这个量 不仅与AVL树的logn相去甚远
而且反过来不难发现
它已经退化成了最原始的线性序列
比如说 list或者vector的水平
因此 这样一种效率
以及在背后决定这一效率的伸展策略
都是不能令我们满意的
然而好消息是
问题的根源并不在于伸展本身
而是在与我们没有把它运用好
那么我们又应该如何
在原有的伸展策略基础上 进行改进呢
我们马上就会看到
从量上讲 这种改进并不大
只需要做一处非常非常微妙的改进
这就犹如画龙点睛那个故事一样
作为一条龙
我们目前的伸展策略实际上已经相当完备
它所缺乏的
只是能够体现其灵魂的那样一只眼睛
没错 不是一双眼睛 而仅仅是一只
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试