码迷,mamicode.com
首页 > 其他好文 > 详细

4、跃进表

时间:2019-04-10 00:41:14      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:1.7   double   集合   定义   backward   分数   后退   素数   bsp   

跃进表是一个有序数据结构,它通过在每个节点上维护多个指向其他节点的指针,从而达到快速访问节点的目的;
跃进表支持平均O(logN)、最坏O(N)复杂度的节点查询,还可以通过顺序性来批量处理节点;
大多数情况下,跳跃表与平衡树效率差不多,并且因为跳跃表的实现比平衡树要来的更简单,所以可以使用跳跃表来替换平衡树。
Redis使用跳跃表作为有序集合键的底层实现之一。如果一个有序集合包含的元素数量比较多,或者有序集合中元素的成员是比较长的字符串时,Redis就是使用跳跃表来作为有序集合键的底层实现。
Redis中只有两个地方可以使用到跳跃表一个是有序集合,另一个是集群节点中用作内部数据结构。
Redis的跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构则用于保存跳跃表节点的相关信息,比如节点数量、以及指向表头节点和表尾节点的指针等等。
技术图片
上面是zskiplistNode跳跃表节点结构;
header:指向跳跃表的表头节点;
tail:指向跳跃表的表尾节点;
level:记录目前跳跃表内,层次最大的那个节点的层数(表头节点的层数不计算在内);
length:记录跳跃表的长度,即是跳跃表目前包含节点的数量(表头节点不计算在内);
层(level):如上图中,L1、L2都是层级。每个层都带有两个属性:前进指针和跨度;
前进指针用于访问表尾方向的其他节点,
而跨度则记录了前进指针所指向的节点和当前节点的距离;
后退(backward):节点中BW代表后退指针,它指向位于当前节点前一个的节点,后退指针在程序从表尾向表头遍历时使用。
分数:各个节点中所保存的值。在跳跃表中各个节点按照各自所保存的分值从小到大排序;
成员对象:各个节点中,o1、o2、o3是节点所保存的成员对象。
 
跳跃表节点的实现由redis.h/zskiplistNode结构定义:
typedef struct zskiplistNode{
//后退指针
struct zskiplistNode *backward;
//分值
double score;
//成员对象
robj *obj;
//层
struct zskiplistNode {
//前进指针
struct zskiplistNode *forward;
//跨度
unsigned int span;
} level[];
}

4、跃进表

标签:1.7   double   集合   定义   backward   分数   后退   素数   bsp   

原文地址:https://www.cnblogs.com/use-D/p/10680734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!