您的位置:首页 > 其它

伸展树

2017-05-25 09:46 72 查看
伸展树,保证从空树开始任意连续M次对树的操作最多花费O(MlogN)时间。

当M次操作的序列总的最坏情形运行时间为O(Mf(N))时,就说它的摊还运行时间为O(f(N))。

因此,一棵伸展树每次操作的摊还代价是O(logN)。

伸展树的基本思想是,当一个结点被访问后,它就要经过一系列AVL树的旋转被推到根上。

在伸展树上的一般操作都基于伸展操作:假设想要对一个二叉查找树执行一系列的查找操作,为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法, 在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。伸展树应运而生。伸展树是一种自调整形式的二叉查找树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。(维基)

在32个结点的树中访问1到9的结果:



















参考Mark Allen Weiss《数据结构与算法分析c++描述》第三版,仅供学习交流之用,转发请注明原出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  伸展树