局部性
Locality: 刚被访问过的数据,极有可能很快地再次被访问。这一现象在信息处理过程中屡见不鲜。
BST: 刚刚被访问过的节点,极有可能很快地再次被访问。
连续的m次查找(m >> n = |BST|),采用AVL一共需要O(mlogn)的时间。
利用局部性,能否更快呢?
策略:节点一旦被访问,随即调整到树根。
逐层伸展
节点V一旦被访问,随即转移到树根
一步一步往上爬,自下而上,逐层单旋
zig(v -> parent)
zag(v -> parent)
最终V被推送到树根
实例
最坏情况
旋转次数呈周期性的算术级数演变:每一周期累计Ω(n^2),分摊Ω(n)!
低效率的根源
1、全树拓扑始终呈现单链表结构,等价于一维列表。
2、被访问节点的深度,呈周期性的算术级数演变,平均为Ω(n)
n-1, n-2, n-3, ..., 3, 2, 1; n-1, ...
探讨了通过逐层伸展策略优化搜索树的方法,即当一个节点被访问时将其调整到树根位置以利用数据访问的局部性原理,旨在减少连续多次查找操作的时间复杂度。
508

被折叠的 条评论
为什么被折叠?



