一.概述 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。在大部分情况下,跳跃表的效率可以和平衡树(关系型数据库的索引就是平衡树结构)相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序使用跳跃表来代替平衡树。 R ...
分类:
其他好文 时间:
2018-11-10 18:06:49
阅读次数:
184
最近在看redis方面的书籍,碰到了跳跃表这个数据结构。常规的单向链表在进行增删改查时,只能从头结点开始遍历,时间复杂度O(N),而跳跃表采用了二分法的思想,平均时间复杂度可以做到O(logN),最坏时间复杂度O(N)。另外,跳跃表是一种基于概率的数据结构(见下文添加元素操作)。 基本结构 下图是跳 ...
分类:
其他好文 时间:
2018-11-07 15:30:02
阅读次数:
211
跳跃表详注 具体看注释代码 luoguP3369: https://www.luogu.org/recordnew/show/11782419 1 #include<bits/stdc++.h> 2 #define repeat(a,b,c,d) for (int a=b;a<=c;a+=d) 3 ...
分类:
其他好文 时间:
2018-10-11 21:57:24
阅读次数:
251
知识来源:算法导论 数据结构的扩展步骤:(在真正设计的时候,下面的步骤的顺序可以置换) 1.选择一种基础数据结构 2.确定基础数据结构中需要维护的附加信息 3.检验基础数据结构上的基本修改操作能否维护附加信息 4.设计需要的新操作 如果要插入数值3,首先要知道3应该插入的位置。使用二分查找可以最快定 ...
分类:
其他好文 时间:
2018-10-03 00:42:20
阅读次数:
251
对象 前面我们介绍了Redis的主要数据结构,如:简单动态字符串SDS、双端链表、字典、压缩列表、整数集合等。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都 ...
分类:
其他好文 时间:
2018-10-02 17:57:08
阅读次数:
127
整数集合 整数集合(insert)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。举个栗子,如果我们创建一个只包含五个元素的集合键,并且集合中的所有元素都是整数值,那么这个集合键的底层实现就会是整数集合: 整数集合的实 ...
分类:
其他好文 时间:
2018-10-01 14:08:43
阅读次数:
294
redis是我们使用非常多的一种缓存技术,他的性能极高,读的速度是110000次/s,写的速度是81000次/s。这么高的性能背后,到底是怎么样的实现在支撑,这个系列的文章,我们一起去看看。 redis的底层数据结构有以下7种,包括简单动态字符串(SDS),链表、字典、跳跃表、整数集合、压缩列表、对 ...
分类:
其他好文 时间:
2018-09-15 13:16:13
阅读次数:
183
参考文献 1. "redis数据结构分析" 2. "Skip List(跳跃表)原理详解 " 3. "redis 源码分析之内存布局" 4. "Redis 基础数据结构与对象" 5. "Redis设计与实现 第7章 压缩列表 " 在redis中构建了自己的底层数据结构:动态字符,双端链表,字典,压缩 ...
分类:
其他好文 时间:
2018-07-18 00:37:58
阅读次数:
214
Redis中的跳跃表 跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的 跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点 跳跃表在Redis用于实现有序集合键和在集群节点中用作内部数据结构 跳跃表的实现 ...
分类:
其他好文 时间:
2018-06-29 16:29:58
阅读次数:
2517
跳跃表原理和实现 前提 有时候会被问到链表如果做到二分搜索,可能会有部分的人会去把链表中的值保存到数组来进行二分,但是如果知道跳跃表的话,那么这个数据结构就可以解决这个困惑,它允许快速查询一个有序连续元素的数据链表,它的效率可以做到和二分相同,都是O(logn)的平均时间复杂度,其空间复杂度为O(n ...
分类:
其他好文 时间:
2018-06-22 17:43:43
阅读次数:
689