Algorithm skiplistnode变量是什么;span";在redis.h是什么意思?
在redis.h中,skipnode的定义如下:Algorithm skiplistnode变量是什么;span";在redis.h是什么意思?,algorithm,data-structures,redis,skip-lists,Algorithm,Data Structures,Redis,Skip Lists,在redis.h中,skipnode的定义如下: typedef struct zskiplistNode { robj *obj; double score; struct zskiplistNode *backward; struct zskiplistLevel { struct zskiplistNode *forward; unsigned int span; } level[]; } zskiplistNode;
typedef struct zskiplistNode {
robj *obj;
double score;
struct zskiplistNode *backward;
struct zskiplistLevel {
struct zskiplistNode *forward;
unsigned int span;
} level[];
} zskiplistNode;
var
span
是什么意思?此变量存储什么?span
在特定节点存储当前节点和当前级别的节点之间的节点数->转发span
用于计算跳过列表中元素的基于1的排名
例如,考虑下面的跳过列表:
考虑头部节点。所有级别的跨度均为1 考虑节点1。在级别0时,跨度为1,因为如果跟随前进指针,将跨越1个元素。在级别1,跨度为2,因为如果跟随前进指针,将跨越2个元素(节点2和节点3)请看下面的图片。你可以看到等级是如何从每个等级的跨度值计算出来的。你的答案很好~~~~非常感谢~~但我认为skiplist可以被红黑树或八字树取代,它们可能有更好的性能。不,它不能。跳过列表提供了RB树或splay树没有的一个有趣属性。它可以以log(n)成本找到第n项。例如被ZRANGE使用。我认为splay tree还可以在节点中添加一个额外的元素,以log(n)的成本找到第n个项目。但是splay花了更多的时间来写和读主内存,这对redis来说并不像我想的那样方便。