跳表

作者: iOS小洁 | 来源:发表于2023-02-04 15:57 被阅读0次

跳表

跳表,又叫做跳跃表、跳跃列表,在有序链表的基础上增加了“跳跃”的功能

设计的初衷是为了取代平衡树(比如红黑树)

对比平衡树 :

  • 跳表的实现和维护会更加简单
  • 跳表的搜索、删除、添加的平均时间复杂度是 O ( lo g n )

跳表搜索

从顶层链表的首元素开始,从左往右搜索,直至找到一个大于或等于目标的元素,或者到达当前层链表的尾部

如果该元素等于目标元素,则表明该元素已被找到

如果该元素大于目标元素或已到达链表的尾部,则退回到当前层的前一个元素,然后转入下一层进行搜索

跳表的添加、删除

添加的细节:随机决定新添加元素的层数

删除的细节:删除一个元素后,整个跳表的层数可能会降低

跳表的层数

  • 跳表是按层构造的,底层是一个普通的有序链表,高层相当于是低层的“快速通道”
    • 在第 i 层中的元素按某个固定的概率 p(通常为 ½ 或 ¼ )出现在第 i + 1层中,产生越高的层数,概率越低
      • 元素层数恰好等于 1 的概率为 1 – p
      • 元素层数大于等于 2 的概率为 p,而元素层数恰好等于 2 的概率为 p * (1 – p)
      • 元素层数大于等于 3 的概率为 p^2,而元素层数恰好等于 3 的概率为 p^2 * (1 – p)
      • 元素层数大于等于 4 的概率为 p^3,而元素层数恰好等于 4 的概率为 p^3 * (1 – p)
      • .....一个元素的平均层数是 1 / (1 – p)
  • 当 p = ½ 时,每个元素所包含的平均指针数量是 2
  • 当 p = ¼ 时,每个元素所包含的平均指针数量是 1.33

复杂度分析

  • 每一层的元素数量
    • 第 1 层链表固定有 n 个元素
    • 第 2 层链表平均有 n * p 个元素
    • 第 3 层链表平均有 n * p^2 个元素
    • 第 k 层链表平均有 n * p^k 个元素…
  • 另外
    • 最高层的层数是 log 1/p n,平均有个 1/p 元素
    • 在搜索时,每一层链表的预期查找步数最多是 1/p,所以总的查找步数是 –(log p n/p),时间复杂度是O(logn)

相关文章

  • 跳表

    跳表的定义 跳表(SkipList):增加了向前指针的链表叫做跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化...

  • 跳表

    跳表的定义 跳表(SkipList):增加了向前指针的链表叫做跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化...

  • HBase内存管理之MemStore

    基于跳表实现的MemStore基础模型 实现MemStore模型的数据结构是SkipList(跳表),跳表可以实现...

  • 2.跳表的基本实现和特性

    一、跳表 跳表的设计与实现为啥 redis 使用跳表(skiplist)而不是使用 red-black redis...

  • 有关跳跃表的干货都在这里

    跳表的数据结构 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。...

  • [AlgoGo]跳表SkipList

    跳表是什么 跳表的实现基于链表,弥补了链表不便于查找的缺点,所以跳表其实不是表(table)而是链(list)。跳...

  • 知识快速回顾(数据结构+算法)

    打卡时间:2020-2-23 19:46 ~ 20:30 跳表 什么是跳表 ? 跳表是一种高效的链表结构,它通过增...

  • 跳表skiplist

    增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查...

  • 03、数组、链表、跳表

    数组 链表 跳表 ![ 跳表在工程中的应用LRU Cache - Linked listhttps://www.j...

  • 【算法打卡60天】Day15跳表:为什么Redis一定要用跳表来

    Day15学习内容主要为以下三点:1.如何理解“跳表”?跳表:链表加多级索引的结构。跳表使用空间换时间的设计思路,...

网友评论

    本文标题:跳表

    本文链接:https://www.haomeiwen.com/subject/yqvohdtx.html