Redis跳跃表数据结构

博客围绕Redis和数据结构展开,虽未给出具体内容,但可知涉及信息技术领域中Redis数据库及数据结构相关知识。

1、简介

跳跃表SkipList是一种有序的数据结构,是Redis有序集合的底层实现之一。

跳跃表中,数据被存储在节点中,每个节点包含一个数据元素和一组指向其他节点的指针。这些指针分布在不同的层级,用于提升跳跃表的访问性能。

跳跃表支持平均O(log N)、最坏O(N)复杂度的查找性能,并且支持通过顺序性操作来批量处理节点。

在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为眺跃表的实现比平衡树 要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。

2、跳跃表的数据结构

跳跃表是一种扩展的有序链表,它通过维护一个多级索引结构来实现快速查找。在跳跃表中,每个节点包含一个数据元素和一组指向其他节点的指针。这些指针分布在不同的层级,每个层级的指针数量都比下一层级少。最底层(第0层)包含所有的元素,而最高层则只包含少数几个元素。这样,查找操作可以在高层级开始,快速跳过那些不需要的元素。

3、跳跃表数据结构

在这里插入图片描述
如果通过简单的有序链表访问Sam,那么要经过Amy、Lucy、Rose、John、Jack。
如果在跳跃表中访问Sam,只限于经过Rose、Jack。

可以看到查找的复杂度得到极大提升。

4、节点的层高(指向后面节点的指针数量)怎么确定?

每个结点的层高由概率决定,假设元素X要插入跳跃表,很显然,L1层肯定要插入X。
那么L2层要不要插入X呢?我们希望上层元素个数是下层元素个数的1/2,
所以我们有1/2的概率希望X插入L2层,那么抛一下硬币吧,正面就插入,反面就不插入。
那么L3到底要不要插入X呢?相对于L2层,我们还是希望1/2的概率插入,那么继续抛硬币

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值