美文网首页
redis很有趣的数据结构-跳表

redis很有趣的数据结构-跳表

作者: 小名源治 | 来源:发表于2022-10-23 15:23 被阅读0次

在redis的zset(有序集合)数据类型中,它有两种实现方式:跳表和压缩列表;
这里介绍跳表;(跳表在我的理解就是空间换时间的方法,存储更多的结点信息,以此来换取更快的查询时间。有点类似于二分查找

跳表

跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)

对于单个有序列表链表来说,我们要在其中查找数据,只能从头开始遍历查找,这样的时间复杂度是O(n),效率很低。
假如我们需要找结点6,那么就必须遍历1 2 3 4 5 6,六个结点才能找到它

image.png

如果我们想要提高其查询效率,可以考虑在链表上构建索引的方式,每两个节点提取一个节点到上级,我们把抽出来的那一级就叫做索引.
找结点6:首先遍历L1这层,1 3 5 7,遍历5 和7的时候发现 5 < 6 < 7;
那么进入下一层寻找,直接就能找到6。这样只遍历了5个结点就找到了它。

image.png

我们还可以添加多级索引,当数据量很大的时候,我们的查询效率就会显著提升。

image.png

跳表的时空复杂度分析

时间复杂度

如果一个链表有 n 个结点,如果每两个结点抽取出一个结点建立索引的话,那么第一级索引的结点数大约就是 n/2,第二级索引的结点数大约为 n/4,以此类推第 m 级索引的节点数大约为 n/(2^m)。

假如一共有 m 级索引,第 m 级的结点数为两个,通过上边我们找到的规律,那么得出 n/(2^m)=2,从而求得 m=log(n)-1。如果加上原始链表,那么整个跳表的高度就是 log(n)。

如果每层需要遍历k个结点,那么我们的时间复杂度就是k*log(n);
其实仔细分析就不难发现,由于我们是每两个结点就提出一个结点上去,(1 3 5就会将1 5提到上一层索引中,没有提出去的数字就是他们的中间数),那么这样就可以看出没层其实只需要遍历两个结点,k就等于2。

最终时间复杂度:2*log(n) ==> log(n)

空间复杂度

如果一个链表有 n 个结点,如果每两个结点抽取出一个结点建立索引的话,那么第一级索引的结点数大约就是 n/2,第二级索引的结点数大约为 n/4,以此类推第 m 级索引的节点数大约为 n/(2^m),我们可以看出来这是一个等比数列
总和就是 n/2+n/4+n/8…+8+4+2=n-2,所以跳表的空间复杂度为 o(n)。

参考

相关文章

  • 定时器实现 & 红黑树,跳表

    跳表:是为一个有序的链表建立多级索引的数据结构叫做跳表。redis中zset数据量大时底层数据结构使用跳表。 re...

  • 【算法打卡60天】Day36跳表:为什么Redis一定要用跳表来

    Day36学习内容 :跳表:为什么Redis一定要用跳表来实现有序集合?跳表是一种动态数据结构,实现灵活,可以通过...

  • 2.跳表的基本实现和特性

    一、跳表 跳表的设计与实现为啥 redis 使用跳表(skiplist)而不是使用 red-black redis...

  • Redis深度历险-跳表

    Redis深度历险-跳表 跳表是一个比较经典的数据结构,非常有用但又不像红黑树那么复杂,非常值得学习;在Ridis...

  • 数据结构 - 跳表skiplist

    更多数据结构内容,请参考:数据结构 - 概要 简介 漫画算法:什么是跳跃表? Redis 为什么用跳表而不用平衡树...

  • 跳表SkipList

    因为这个周末加班,一直没有更新,实属抱歉,今天,我们来聊一聊一个数据结构,跳表。跳表是redis的一个核心组件,也...

  • redis数据结构--跳表

    跳表实质是链表,通过维护多个指向其他节点的指针,达到快速访问节点的目的。跳表查找的时间复杂度平均情况下是O(log...

  • 有关跳跃表的干货都在这里

    跳表的数据结构 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。...

  • HBase内存管理之MemStore

    基于跳表实现的MemStore基础模型 实现MemStore模型的数据结构是SkipList(跳表),跳表可以实现...

  • Redis为什么用跳表而不用平衡树?

    Redis为什么用跳表而不用平衡树? 本文是《Redis内部数据结构详解》系列的第六篇。在本文中,我们围绕一个Re...

网友评论

      本文标题:redis很有趣的数据结构-跳表

      本文链接:https://www.haomeiwen.com/subject/iqqgzrtx.html