skiplistnode变量“span”在redis.h中的含义是什么?

时间:2012-05-05 03:27:18

标签: 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;

var span是什么意思?这个var存储了什么?

1 个答案:

答案 0 :(得分:4)

特定节点处的

span存储当前节点与节点之间的节点数量 - >当前级别的前向节点。 span用于计算跳过列表中基于1的元素排名。

例如,请考虑以下跳过列表: A Skip List

考虑头节点。所有级别的跨度都是1.

考虑节点1.在级别0,跨度为1,因为如果您按照前向指针, span 1个元素。在级别1,span为2,因为如果您按照前进指针,您将 span 2个元素(节点2和节点3)。

看看function zslGetRank in t_zet.c。您可以看到如何根据每个级别的跨度值计算排名。