欢迎来到天天文库
浏览记录
ID:34313596
大小:185.73 KB
页数:20页
时间:2019-03-05
《伸展树的原理及应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、伸展树的原理及应用常州市第一中学林厚从【摘要】本文介绍了伸展树的基本概念、基本操作及其应用,全文分为四个部分:第一部分引言,主要说明了二叉查找树在信息学竞赛中的重耍地位,并且指出二叉查找树在某些情况下时间复杂度较高的缺点,以及平衡树编程复杂度乂过高的困惑,从而引入吋间复杂度和编程复杂度都更为优秀的伸展树。第二部分介绍了伸展树的基本操作,并给出了伸展树操作时间复杂度的分析和证明,指出伸展树的各种基本操作的平摊时间复杂度均为0(log2n),说明伸展树是一种较平衡的二叉查找树。第三部分通过一个例子介绍了伸展树在解题中的应用,并将它与其它树状数据结构进行了对比。第四部分指出了
2、伸展树的优点,总结全文,给出本文的一些附录。【第一部分引言】二叉查找树(BinarySearchTree)能够支持多种动态集合操作。因此,在信息学竞赛中,二叉查找树有着非常重要的作用,它可以被用来表示有序集合、建立索引或优先队列等。作用于二叉查找树上的基本操作的时间复杂度是与树的高度成正比的。对一棵n个结点的二叉树,这些操作在最优情况下运行时间为0(log2n)。但如果二叉树退化成n个结点的线性链,则这些操作在最坏情况下的运行时间为0(n)。有些二叉查找树的变形,其基本操作在最坏情况下性能依然很好,如平衡树(AVL)等。但是需要额外的空间來存储平衡信息,且实现起来比较复
3、杂。同时,如果访问模式不均匀,平衡树的效率就会受到影响。而伸展树却可以克服这些问题。伸展树(SplayTree),是由DanielSleator和RobertTarjan创造,也是对二叉查找树的一种改进。虽然它并不能保证树一直是“平衡”的,但对于它的一系列操作,可以证明其每一步操作的“平摊时间”复杂度都是0(log2n),平摊时间是指在一系列最坏情况的操作序列屮单次操作的平均时间。所以从某种意义上说,伸展树也是一种平衡的二叉查找树。而在各种树状数据结构中,伸展树的空间要求(不需要记录用于平衡的冗余信息)和编程复杂度也都是很优秀的。获得较好平摊效率的一种方法就是使用“自调
4、整”的数据结构。与平衡结构或有明确限制的数据结构相比,自调整的数据结构有以下几个优点:1、从平摊角度来说,它们忽略常量因子,因此绝对不会差于有明确限制的数据结构。而且由于它们可以根据具体使用情况进行调整,所以在使用模式不均匀的情况下更加有效;2、由于无需存储平衡信息或者其它限制信息,所以所需的存储空间更小;3、它们的查找和更新算法概念和操作都很简单,易于实现。当然,自调整结构也有其潜在的缺点:1、它们需要更多的局部调整,尤其是在查找期间。而那些有明确限制的数据结构仅需要在更新期间进行调整,查找期间则不用;2、一系列查找操作中的某一个可能会耗时较长,这在实时应用程序中可能
5、是一个不足之处。【第二部分伸展树的基本操作】伸展树是对二叉查找树的一种改进。与二叉查找树一样,伸展树也具有有序性,即伸展树中的每一个结点x都满足:该结点左子树中的每一个元素都小于X,而其右子树中的每一个元素都大于X。但是与普通二叉查找树不同的是,伸展树可以“自我调整”,这就要依靠伸展树的核心操作一一伸展操作Splay(x,S)。—、伸展操作Splay(x,S)伸展操作Splay(x,S)是在保持伸展树有序性的前提下,通过一系列旋转,将伸展树S中的元素x调整至树的根部。在调整的过程中,要分以下三种情况分別处理:情况一:结点x的父结点y是根结点。这时,如果x是y的左孩子,则
6、我们进行一次Zig(右旋)操作;如果x是y的右孩子,则我们进行一次Zag(左旋)操作。经过旋转,使x成为二叉查找树S的根结点,调整结束。如图1所示:图1、ZIG或ZAG图2、ZTG-ZTG情况二:结点x的父结点y不是根结点。则我们设y的父结点为z,且x与y同时是各自父结点的左孩子、或者同时是各自父结点的右孩子。这时,我们进行一次Zig-Zig操作、或者Zag-Zag操作。如图2所示:情况三:结点x的父结点y不是根结点。则我们设y的父结点为z,且x与y中一个是其父结点的左孩子、而另一个是其父结点的右孩子。这吋,我们进行一次Zig-Zag操作、或者Zag-Zig操作。如图3
7、所示:ZIG-ZAG图3、ZIG-ZAG下面举一个例子来体会上面的伸展操作。如图4所示,最左边的一个单链先执行Splay(l,S),我们将元素1调整到了仲展树S的根部。如图5所示,再执行Splay(2,S),将元素2调整到了伸展树S的根部。从直观上可以看出在经过调整后,伸展树比原来“平衡”了许多。而伸展操作的过程并不复杂,只需要根据上述三种情况进行旋转就可以了,而三种旋转都是由基本的左旋和右旋组成的,实现较为简单。图4>Splay(1,S)图5、Splay(2,S)二、伸展树的基本操作利用Splay操作,我们可以在伸展树S上进行如下几种基
此文档下载收益归作者所有