美文网首页
跳表skiplist

跳表skiplist

作者: Snipers_onk | 来源:发表于2020-01-07 15:22 被阅读0次

增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。(来自百度百科)

原理

链表本身是无法使用二分查找的,只能顺序查找,为了提高查找效率,可以在链表上一半的节点数据建立索引,这是一种以空间换时间的典型算法。

skipList.png

查找

查找数据时,先从最高层索引开始查找,相等则存在;否则找到索引比val大的前一个索引,然后进入下一层继续查找,直到层数为0。

比如要查找6,先从二级索引开始,找到5,然后向下进入一级索引,然后再进入原始链表,找到6。

skipList - 副本.png

插入

插入操作和查找的过程一致,先查找需要插入的位置,最终插入到原始链表中。当链表的节点相对于上级索引超过某个数量时,需要向上建立索引,跳表是使用抛硬币的方式决定节点是否提拔,每个节点有50%的概率,保证索引大致均匀。

删除

删除操作和查找的过程一致,先查找需要删除的位置,然后向下逐层删除。如果该层只有这一个索引,则删除该层。

写在最后

在Redis中Sort Set就是用跳表实现的,但从效率的角度来讲,当数据量比较大时,RBT的效率要高于跳表,Redis为什么用跳表而不是RBT,查了一些资料,最大的可能就是跳表实现更简单。

相关文章

  • LeetCode #1206 Design Skiplist 设

    1206 Design Skiplist 设计跳表 Description:Design a Skiplist w...

  • HBase内存管理之MemStore

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

  • 跳表

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

  • 跳表

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

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

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

  • 跳表SkipList

    对于有序并且对增删改操作友好的数据结构有List、Tree等,对于Tree实现起来可能比较复杂,而SkipList...

  • 跳表(SkipList)

    普通的有序单链表中,查找的时间复杂度是O(N),尽管真正的插入和删除节点的复杂度只有O(1),但都要先去找寻节点。...

  • 跳表skiplist

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

  • 跳表 - skipList

    简介 SkipList(跳表)这种数据结构是由William Pugh于1990年在在 Communication...

  • skiplist跳表

    写在开头 最近在看leveldb源码,读到了skiplist的实现,虽然早就知道有这样一种数据结构,但是一直没有好...

网友评论

      本文标题:跳表skiplist

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