跳跃表(跳表)

简介

有序集合在生活中比较常见,例如根据成绩对学生排名,根据得分对玩家排名等。对于有序集合的底层实现,可以用数组、平衡树、链表等。数组不便元素的插入、删除;平衡树或红黑树虽然效率高但结构复杂;链表查询需要遍历所有效率低。Redis采用的是跳跃表。跳跃表效率堪比红黑树,实现远比红黑树简单。

实例

对比有序链表和跳跃表,从链表中查询出51

  • 有序链表


要查找值为51的元素,需要从第一个元素开始依次查找、比较才能找到。共需要6次比较。

  • 跳跃表


从第2层开始,1节点比51节点小,向后比较。

21节点比51节点小,继续向后比较,后面就是NULL了,所以从21节点向下到第1层

在第1层,41节点比51节点小,继续向后,61节点比51节点大,所以从41向下

在第0层,51节点为要查找的节点,节点被找到,共查找4次。

从此可以看出跳跃表比有序链表效率要高

[Redis6]跳跃表(跳表)相关推荐

  1. Redis源码剖析(十一)跳表

    在树形结构中,常见的平衡树有AVL树和红黑树,但是由于AVL树过于平衡,导致维护平衡所需的代价过大,使用的不多,不过其中几种旋转算法还是值得学习的.取而代之的是较为平衡的红黑树,STL中的map和se ...

  2. Redis 数据结构 :SDS、链表、字典、跳表、整数集合、压缩列表

    文章目录 SDS 结构分析 内存策略 空间预分配 惰性空间释放 总结 链表 结构分析 总结 字典 结构分析 rehash 渐进式rehash 总结 跳表 结构分析 总结 整数集合 结构分析 升级 降级 ...

  3. 【恋上数据结构】跳表(Skip List)原理及实现

    跳表(Skip List) 引出跳表 跳表介绍 跳表原理及实现 使用跳表优化链表 跳表基础结构 跳表的搜索 跳表的添加.删除 跳表的层数 跳表的复杂度分析 跳表 - 完整源码 数据结构与算法笔记:恋上 ...

  4. java 实现跳表(skiplist)及论文解读

    什么是跳跃表 跳表由William Pugh发明. 他在论文 <Skip lists: a probabilistic alternative to balanced trees>中详细介 ...

  5. mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  6. 查找、插入、删除都很快的数据结构(散列表vs红黑树vs跳表)

    散列表 散列表的插入.删除.查找操作的时间复杂度可以做到常量级的 O(1),非常高效. 平衡二叉查找树(红黑树) 二叉查找树在比较平衡的情况下(红黑树是一种平衡二叉树),插入.删除.查找操作时间复杂度 ...

  7. mysql索引和redis比较_聊聊Mysql索引和redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  8. 面试官:为何Redis使用跳表而非红黑树实现SortedSet?

    知道跳表(Skip List)是在看关于Redis的书的时候,Redis中的有序集合使用了跳表数据结构.接着就查了一些博客,来学习一下跳表.后面会使用Java代码来简单实现跳表. 什么是跳表 跳表由W ...

  9. redis的压缩列表和跳表,看这一篇文章就够了

    说到redis,大家的第一印象就是它快,它接收到一个键值对操作后,能以微秒级别的速度找到数据,并快速完成操作.我们知道redis是内存数据库,所有的操作都是在内存上实现的,这是它快的一个重要原因,那么 ...

最新文章

  1. 牛客网:为什么不能将实数作为 HashMap 的 key?
  2. 安全漏洞“心脏出血”继续 原因是“丘比特”
  3. Flutter开发Flutter与原生OC、Java的交互通信-1(47)
  4. python pip 报错 Command “python setup.py egg_info“ failed with error code 1 解决方法
  5. 辨异 —— 不同的编程语言(编译型语言、解释型语言、动态语言、静态语言)...
  6. 布线管理的设计(一)
  7. Python——eventlet.greenpool
  8. 【1+X Web前端等级考证 】| 最新Web前端开发中级实操
  9. 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking
  10. 变形金刚2影院版完整字幕
  11. 用HTML+CSS实现百度静态页面
  12. python练习题——文件的打开、读取、复写
  13. IA300加密狗使用
  14. [轻笔记] label smoothing(标签平滑)
  15. 威纶通触摸屏如何在报警的同时,显示出异常数据的当前值?
  16. FLASH按钮链接,flash按扭里加链接
  17. 路由传参说有几种方式
  18. 西工大机考《 现代设计方法》大作业网考
  19. 2020湖湘杯部分writeup
  20. 多边形裁剪|Sutherland-Hodgman

热门文章

  1. [转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!
  2. [转]总结:Apache/Tomcat/JBOSS/Jetty/Nginx区别 .
  3. linux c之把最简单的字符串数据追加写入文件
  4. Android之获取设备的型号和手机厂商
  5. Android之发送短信后按钮(60秒)变灰色每隔一秒递减显示
  6. 【C语言简单说】四:常量
  7. php多个文件上传代码,PHP单文件上传类或多文件上传类源码
  8. python0表示剪刀_石头,纸,剪刀Python代码。帮助简化
  9. go 服务器 源码,LollipopGo开源游戏服务器框架--global服务器源码
  10. c语言十佳运动员有奖评选系统_2019年沃德十佳内饰解读