伸展树:逐层伸展

来源:互联网 发布:mac ansible 编辑:程序博客网 时间:2024/06/05 19:07

局部性

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, ...

1 0
原创粉丝点击