Redis 跳表

基本概念

允许快速查询一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(log n),优于普通队列的O(n)。

动态查找的数据结构

可以作为查找数据结构的包括:

  • 线性结构:数组、链表
  • 非线性结构:平衡树

数组结构

缺点: 移动和删除时需要整体移动

优点: 内存连续, 查找方便

链表

缺点: 查找比较慢, 需要遍历而中间经过的节点, 就算我知道节点的大概位置, 也只能一步步到终点位置, 所以这是个可以优化的地方

平衡树

缺点: 需要存储的内容很多, 复杂的结构增加了调整平衡树的难度

优点: 处理动态查找问题也是可以的, 并且可以存储父子兄弟节点, 存储的信息很多

跳表的雏形

  • 可以看到, 因为数组的内存连续性还有树的平衡树的多节点关系决定了他们不好改造, 而链表最适合被改造
  • 链表插入和删除都很简单, 但是搜索时却需要步步遍历, 明明可以一步到位可偏偏得走很多步, 这就是可以优化的地方
  • 即给链表加索引, 这就是跳表的由来

跳跃链表的实现原理

简单索引

  • 给偶数多添加一个指针, 指向下一个偶数

image-20220525211531839

多级索引

  • 基于偶数节点增加索引并且只有两层的情况下,最高层的节点数是 n/2 ,整体来看搜索的复杂度降低为 O(n/2),并不要小看这个1 / 2 的系数,看到这里会想 增加索引层数到 k ,那么复杂度将指数降低为O(n/2^k)

  • 索引层数也不能无限增加, 如果索引节点数量等于 2 , 那么再增加也没有意义了(因为两个节点怎么样查找都需要走两步)

索引层数和索引节点密度

当索引节点数量太少时将退化为普通链表, 而当索引节点数量太大时也是

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值