扩展树在算法集合中的基本操作与应用.pptVIP

扩展树在算法集合中的基本操作与应用.ppt

  1. 1、本文档共36页,可阅读全部内容。
  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文档。上传文档
查看更多
扩展树在算法集合中的基本操作与应用

伸展树的基本操作与应用 芜湖一中 杨思雨 引言 二叉查找树(Binary Search Tree) 可以被用来表示有序集合、建立索引或优先队列等。 最坏情况下,作用于二叉查找树上的基本操作的时间复杂度,可能达到O(n)。 某些二叉查找树的变形,基本操作在最坏情况下性能依然很好,如红黑树、AVL树等。 伸展树 伸展树(Splay Tree)是二叉查找树的改进。 对伸展树的操作的平摊复杂度是O(log2n)。 伸展树的空间要求、编程难度非常低。 伸展树 伸展树与二叉查找树一样,也具有有序性。 即伸展树中的每一个节点x都满足:该节点左子树中的每一个元素都小于x,而其右子树中的每一个元素都大于x。 伸展树可以自我调整,这就要依靠 伸展操作Splay(x,S) 伸展操作Splay(x,S)是在保持伸展树有序性的前提下,通过一系列旋转操作将伸展树S中的元素x调整至树的根部的操作。 在旋转的过程中,要分三种情况分别处理: 1)Zig 或 Zag 2)Zig-Zig 或 Zag-Zag 3)Zig-Zag 或 Zag-Zig 伸展操作Splay(x,S) 情况1 Zig或Zag操作: 节点x的父节点y是根节点。 伸展操作Splay(x,S) 情况2 Zig-Zig或Zag-Zag操作: 节点x的父节点y不是根节点,且x与y同时是各自父节点的左孩子或者同时是各自父节点的右孩子。 伸展操作Splay(x,S) 情况3 Zig-Zag或Zag-Zig操作: 节点x的父节点y不是根节点,x与y中一个是其父节点的左孩子而另一个是其父节点的右孩子。 伸展操作举例 伸展树的基本操作 查找 插入 删除 求最大值 求最小值 求前趋 求后继 合并 分离 时间复杂度分析 S(x)表示以x为根的子树 |S|表示树S的节点个数 令μ(S) = [ log2|S| ] ([ ]表示取下整) μ(x)=μ(S(x)) 时间复杂度分析 用1元钱表示一个单位时间代价。 伸展树不变量:在任意时刻,伸展树中的任意节点x都至少有μ(x)元的存款。 时间复杂度分析 在Splay调整过程中,费用将会用在以下两个方面: (1)为使用的时间付费。也就是每一次单位时间的操作,要支付1元钱。 (2)当伸展树的形状调整时,需要加入一些钱或者重新分配原来树中每个节点的存款,以保持不变量继续成立。 时间复杂度分析 用μ(x)和μ’(x)分别表示在进行一次旋转操作前后节点x处的存款。 分三种情况分析旋转操作的花费: (1)Zig 或 Zag (2)Zig-Zig 或 Zag-Zag (3)Zig-Zag 或 Zag-Zig 时间复杂度分析 情况1 Zig或Zag 为了保持伸展树不变量继续成立,需要花费: 时间复杂度分析 情况2 Zig-Zig或Zag-Zag 为了保持不变量,需要花费: 时间复杂度分析 情况2 Zig-Zig或Zag-Zag 当μ’(x) μ(x) 时,显然2 (μ’(x) -μ(x)) +1 ≤ 3 (μ’(x) -μ(x)) 也就是进行Zig-Zig操作的花费不超过3 (μ’(x) -μ(x)) 当μ’(x) =μ(x) 时,可以证明: μ’(x) +μ’(y) + μ’(z) μ(x) +μ(y) +μ(z) 也就是说我们不需要任何花费保持伸展树不变量,并且可以得到退回来的钱,并用其中的1元支付单位操作的费用。 一次Zig-Zig或Zag-Zag的花费至多为3 (μ’(x) -μ(x)) 时间复杂度分析 情况3 Zig-Zag或Zag-Zig 与情况2相似,可以证明 一次Zig-Zag或Zag-Zig操作的花费至多为3 (μ’(x) -μ(x)) 时间复杂度分析 Zig Zig-Zig Zig-Zag 3(μ(S)-μ(x))+1 3(μ’(x)-μ(x)) 3(μ’(x)-μ(x)) 伸展树的应用 营业额统计Turnover (HNTSC-02) 伸展树的应用 本题的关键是要每次读入一个数,并且在前面输入的数中找到一个与该数相差最小的一个。 顺序查找前面输入的数 用线段树记录输入的数 红黑树或平衡二叉树 伸展树的应用 每次读入一个数p,将p插入伸展树S,同时p也被调整到伸展树的根节点。 求出p点左子树中的最大值和右子树中的最小值,这两个数就分别是有序集中p的前趋和后继。 进而求得最小差值,加入最后结果T。 伸展树的应用 使用伸展树算法解决本题,时间复杂度为O(nlog2n),空间要求不大,编程和调试也都非常容易。 下面的表格

文档评论(0)

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

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档