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的概率插入,那么继续抛硬币
博客围绕Redis和数据结构展开,虽未给出具体内容,但可知涉及信息技术领域中Redis数据库及数据结构相关知识。
1601

被折叠的 条评论
为什么被折叠?



