• redis设计与实现总结--跳跃表


    跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
    查找效率平均O(logn),最坏O(N),redis有序集合键的底层实现之一。
     
    zskiplist包含四个重要成员变量
    header:指向跳跃表的表头节点。
    tail:指向跳跃表的表尾节点。
    level:记录目前跳跃表内,层数最大的哪个节点的层数(表头节点不算其中)。
    length:记录跳跃表的长度,也就是包含节点的数量(表头不算)。
     
    其中跳跃表的节点结构
    typedef struct zskiplistNode{
        //后退指针
        struct zskiplistNode *backward;
        //分值,按分值从小到大排序
        double score;
        //成员对象
        robj *obj;
        //
        struct zskiplistLevvel{
            //前进指针 
            zskiplistNode *forward;
            //跨度
            unsigned int span;
        } level[];
    }zskiplistNode;
    其中层每次根据幂次定律随机生成1—32之间的值作为level数组的大小。
    跨度:用于记录两个节点的距离,指向null的所有前进指针的跨度为0,其他为1。主要用于计算排位(跨度累加)。
    后退指针:用于从尾开始遍历节点。
    obj:指向一个字符串对象,保存SDS。
    分值相同的节点按照成员对象在字典序中的大小排序。
  • 相关阅读:
    Activity中Intent的知识
    详解 Android 的 Activity 组件
    Android xml资源文件中@的含义
    为App签名的其他方法
    如何将Android程序打包成apk文件
    创建Android虚拟设备(AVD)
    Android开发环境搭建
    论适应和麻木
    一些有趣的图片
    python 写一个scheme 解释器 (二)——简单求值器内核
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/14745012.html
Copyright © 2020-2023  润新知