Splay树和其应用.pptVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Splay树及其应用 Yali 朱全民 二叉查找树 二叉查找树(Binary Search Tree) 可以被用来表示有序集合、建立索引或优先队列等。 最坏情况下,作用于二叉查找树上的基本操作的时间复杂度,可能达到O(n)。 某些二叉查找树的变形,基本操作在最坏情况下性能依然很好,如红黑树、AVL树等。 Splay 树 Splay树是二叉查找树的改进。 对Splay树的操作的均摊复杂度是O(log2n)。 Splay树与二叉查找树一样,也具有有序性。 即Splay树中的每一个节点x都满足:该节点左子树中的每一个元素都小于x,而其右子树中的每一个元素都大于x。 Splay树的核心思想就是通过Splay操作进行自我调整,从而获得平摊较低的时间复杂度。 Splay操作 情况1 Zig或Zag操作: 节点x的父节点y是根节点。 Splay操作 情况2 Zig-Zig或Zag-Zag操作: 节点x的父节点y不是根节点,且x与y同时是各自父节点的左孩子或者同时是各自父节点的右孩子。 Spaly操作 情况3 Zig-Zag或Zag-Zig操作: 节点x的父节点y不是根节点,x与y中一个是其父节点的左孩子而另一个是其父节点的右孩子。 Splay操作举例 Spaly树基本操作 查找:与二叉排序树查找类似,只是查找结束后要将找到的元素通过Splay操作旋转到根。 插入:用查找过程找到要插入的位置,进行插入。然后将新元素旋转到根。 删除:首先在树中找到要删除的元素,将他转到根节点并删去,这样原来的树就分裂成了两棵树,然后将左子树中拥有最大关键字的那一个元素转到根,由于它是左子树中的最大元素,所以他不存在有儿子,这样只要把原来的右子树作为他的右子树,就重新合并成了一棵树。 可见在Splay树的基本操作中,处处要用到Splay旋转操作! 例一 Pet(湖南省省队选拔赛) 宠物收养场提供两种服务:收养被离弃的宠物与让新的主人领养宠物。每个宠物有不相同的特点值。领养人所希望的特点值也不相同。如果领养人/遗弃宠物过多,则当前来的宠物/领养人选择离其特点值最近的(如果有两个特点值与其同样接近,则选择较小的)领养人/宠物,被领养/领养。并且纪录两个特点值的差值。 输入N条请求(X,Y),X=0表示宠物;X=1表示领养人,Y为特征值。 任务是计算所有差值的和。 (N=80000,等待的宠物/领养者数M=10000) 例一 Pet 我们先用最普通的数组记录过多的宠物/领养人。 查找:需要检索整个数组,复杂度为O(M) 删除:删除指定元素之后,需要成批移动主轴元素,时间复杂度也为O(M) 这样最坏情况下时间复杂度为O(NM), 是不可取的。 例一 Pet 对宠物/领养人过多的情况下,我们建立一颗排序二叉树,并记录其属性Sign(宠物/领养人)。 对于命令(X,Y),如果树为空或者X=Sign,则将其插入,并令Sign=x; 否则在树中查找符合要求的结点,记录特征值之差,并将其删除。(注意无论树的属性是0或1,相对进行的操作是相同的) 普通的排序二叉树在最坏情况下时间复杂度也是O(NM) 。我们可以应用较高效的排序二叉树,例如AVL树(平衡二叉树)或者Splay树。 例一 Pet AVL树引入平衡因子的概念,使得整棵排序二叉树严格平衡,时间复杂度严格为O(nlogm)。但是其编程复杂度很高。 Splay树通过Splay旋转操作,使得分摊时间复杂度为O(nlogm),虽然常系数较AVL树相比大。但是操作简便,编程复杂度较低。 在考场上我们要综合考虑各方面的因素,合理的选择数据结构。 例二 郁闷的出纳员(NOI2004) 你是一个公司出纳员,需要处理n条下面的命令: 此外,如果某个员工的工资低于最低工资下界Min,他就会立刻离开公司。 现在请你写一个程序完成这个工资统计的工作。 例二 郁闷的出纳员 这个题目简单来说就是请你设计一种数据结构满足如下4种操作: 向集合中插入一个数; 将集合中所有的数都加上一个值; 将集合中所有的数都减去一个值,并将所有低于min的数从集合中删除掉(min是事先给定的一个固定的数); 查找集合中第k大的数。 我们考虑应用Splay树维护这个工资系统。 例二 郁闷的出纳员 Splay树的插入、删除、查找第K大元素都可以在均摊时间复杂度O(logn)内完成。 但是还有一种操作就是将集合内的所有元素都加上或减去一个值,如果单纯的按照题目要求对数据进行改动,则每一步这样的操作所需的时间复杂度为O(NlogN)(因为需要重建二叉树) 例二 郁闷的出纳员 注意到,这个增值操作不会改变已经在树中的元素的大小关系,只会改变已经在集合内的元素与以后将要加进来的元素间的关系。

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档