伸展树与跳表

概述

  • 字典是词条的结构,包括key和其他信息,其主要包括,搜索,插入和删除等基本操作
  • 伸展树和跳表都可用于字典结构
  • 跳表有很好的平均时间性能
  • 伸展树有很好的分摊代价性能,即对于长的运算序列,具有很好的平均时间性能

伸展树

  • 二叉搜索树
  • 要求根的左子树上的值都小于根值
  • 右子树上的值都小于根值
  • 并且左右子树都是二叉搜索树
  • 常用于表示动态集

  • 自动调节树和伸展树
  • 用二叉搜索树的时候,容易出现树的退化,树的高度增大,不平衡等?
  • 在伸展树上,执行一个m次运算(搜索,插入,删除),总时间为O(mlogn)

  • 伸展树
  • 是二叉搜索树
  • 要求每次访问一个元素后,将最新访问(搜索,插入,删除(删除的节点的双亲为伸展节点))的元素移至二叉搜索树的根部,(该元素的这个节点成为伸展节点,伸展结束后,节点变成根节点)从而保证经常访问的元素靠近根节点。而较少访问的元素位于较低的层次
  • 这种将元素移至根部的操作,就叫做伸展
  • 虽然某次操作可能很费事O(n),但是总体上的平均分摊代价为O(mlogn)

  • 伸展操作
  • 伸展操作,由至多一次单一旋转,和若干次双重旋转组成
  • 旋转
  • zigzig/zagzag的操作,并不是从底连续执行了两次zigzig/zagzag,而是从两次zig/zag的根节点处,进行的两次zigzig/zagzag,此处要特别注意
  • zigzag操作,可以分开成两步,zig和zag进行操作

跳表

  • 概述

  • 跳表被认为是可以替代平衡搜索树的另外一种选择

  • 具有很好的搜索,插入和删除的时间效率,且比前者更容易实现

  • 删除某个元素时,应记得将该删除元素的前后,指向其本身的指针,进行更改

  • 转自百度图片,侵删
    在这里插入图片描述

  • 完全以2i平均分布的指针的跳表,成为完全平衡跳表

  • 但是我们在插入元素时,就会破坏掉这种平均

  • 要想保证完全平衡的跳表,代价是很大的

  • 因此,我们对插入元素到底拥有多少指针,以概率来决定,比如1指针1/2,2指针1/4…

  • 这样的跳表称为称为随机跳表

  • n个元素的跳表的平均空间复杂度为O(n)

猜你喜欢

转载自blog.csdn.net/qq_38096989/article/details/88573356