redis有序集合zset的实现方式 跳表

Redis的有序集合zset采用跳表作为底层数据结构,而非AVL或红黑树。跳表是一种简单但查询效率与平衡二叉树相当的数据结构,其查询时间复杂度期望为O(logN)。文章介绍了跳表的原理,查找、插入和删除操作,以及Redis选择跳表而非红黑树的原因,强调了跳表在区间查找和实现上的优势。
摘要由CSDN通过智能技术生成

有序集合zset

之前在使用redis的时候就发现redis的有序集合十分方便,再写关于排行类的统计存储时,用mysql十分麻烦,而用reids的有序集合就十分的方便,然后就想看看他的底层实现,而却发现他没有使用AVL,红黑树等实现,而是使用了一种叫做跳表的数据结构,却是一种十分的简单的数据结构

跳表

跳表是一种相对简单的平衡数据结构 跳表与AVL、红黑树等相比,数据结构简单,算法易懂,但查询的时间复杂度与平衡二叉树/红黑树相当。

跳表的原理#

跳跃表的思想来自于一篇论文:Skip Lists: A Probabilistic Alternative to Balanced Trees. 如果想要深入了解跳跃表,可以阅读论文原文。这里引用论文中的一幅图对跳跃表的原理作一个简单的说明。
转自其中
: a 表:单链表:查询时间复杂度O(n)
: b 表:level-2单链表:每隔一个节点为一个level-2节点,每个level-2节点有2个后继指针,分别指向单链表中的下一个节点和下一个level-2节点。查询时间复杂度为O(n/2)
: c 表:level-3单链表:每隔一个节点为一个level-2节点,每隔4个节点为一个level-3节点,查询时间复杂度O(n/4)
: d 表:指数式单链表:每2^i个节点的level为i+1,查询时间复杂度为O

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值