Redis 跳跃表原理

跳跃表
跳跃表 (skiplist) 是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针从而达到快速访问节点的目的。
跳跃表是 redis 有序集合 zset 的底层实现方式之一。(当元素个数<128的时候,用 ziplist 实现)

原理
首先从有序数组说起,对于有序数据的查找,可以使用二分查找法将时间复杂度降到 O(logn),但是插入和删除都需要 O(n) 的复杂度。
再说链表,查找时需要从头节点开始遍历,复杂度为 O(n),不过插入、删除只需要移动指针,复杂度为 O(1)。

查找插入/删除
有序数组O(logn)O(n)
链表O(n)O(1)

跳表可以看作用二分查找法对链表进行优化,达到查找只需O(logn)的复杂度。

如图,看成一个优化后的链表结构,如果要查找元素9,无需像链表一样遍历,只需要找到第二层,就可以直接找到。链表的分层就类似二分查找,所以查找只需 O(logn) 的复杂度,同时插入和删除不再是对一个链表进行指针移动,而是这 (logn + 1) 个,插入/删除也就需要 O(logn) 的复杂度。
在这里插入图片描述
跳表原理的简单理解如上,redis 的具体实现更为复杂。
待续。。。。。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值