当前位置: 首页 > news >正文

诸城网络推广公司湖南专业seo公司

诸城网络推广公司,湖南专业seo公司,江苏省网站备案电话,河北住房和城乡建设局网站首页跳跃表 跳跃表(skiplist)是一种随机化的数据, 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出, 跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— …

跳跃表

跳跃表(skiplist)是一种随机化的数据, 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出, 跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说, 跳跃表的实现要简单直观得多。

image
从图中可以看到, 跳跃表主要由以下部分构成:

  • 表头(head):负责维护跳跃表的节点指针。
  • 跳跃表节点:保存着元素值,以及多个层。
  • 层:保存着指向其他元素的指针。高层的指针越过的元素数量大于等于低层的指针,为了提高查找的效率,程序总是从高层先开始访问,然后随着元素值范围的缩小,慢慢降低层次。
  • 表尾:全部由 NULL 组成,表示跳跃表的末尾。

因为跳跃表的定义可以在任何一本算法或数据结构的书中找到,所以本章不介绍跳跃表的具体实现方式或者具体的算法, 而只介绍跳跃表在 Redis 的应用、核心数据结构和 API 。

跳跃表的实现

为了满足自身的功能需要, Redis 基于 William Pugh 论文中描述的跳跃表进行了以下修改:

  1. 允许重复的 score 值:多个不同的 member 的 score 值可以相同。
  2. 进行对比操作时,不仅要检查 score 值,还要检查 member :当 score 值可以重复时,单靠 score 值无法判断一个元素的身份,所以需要连 member 域都一并检查才行。
  3. 每个节点都带有一个高度为 1 层的后退指针,用于从表尾方向向表头方向迭代:当执行 ZREVRANGE 或 ZREVRANGEBYSCORE 这类以逆序处理有序集的命令时,就会用到这个属性。
    这个修改版的跳跃表由 redis.h/zskiplist 结构定义:
typedef struct zskiplist {// 头节点,尾节点struct zskiplistNode *header, *tail;// 节点数量unsigned long length;// 目前表内节点的最大层数int level;} zskiplist;

跳跃表的节点由 redis.h/zskiplistNode 定义:

typedef struct zskiplistNode {// member 对象robj *obj;// 分值double score;// 后退指针struct zskiplistNode *backward;// 层struct zskiplistLevel {// 前进指针struct zskiplistNode *forward;// 这个层跨越的节点数量unsigned int span;} level[];} zskiplistNode;

小结

  • 跳跃表是一种随机化数据结构,查找、添加、删除操作都可以在对数期望时间下完成
  • 跳跃表目前在 Redis 的唯一作用,就是作为有序集类型的底层数据结构(之一,另一个构成有序集的结构是字典)。
  • 为了满足自身的需求,Redis 基于 William Pugh 论文中描述的跳跃表进行了修改,包括:
    1. score 值可重复。
    2. 对比一个元素需要同时检查它的 score 和 memeber 。
    3. 每个节点带有高度为 1 层的后退指针,用于从表尾方向向表头方向迭代。

为啥 redis 使用 跳表 (skiplist) 而不是使用 red-black?

  1. 实现简单。
  2. 区间查找快。跳表可以做到O(logn)的时间复杂度定位区间的起点,然后在原始链表中顺序往后遍历就可以了。
  3. 并发环境优势。红黑树在插入和删除的时候可能需要做一些rebalance的操作,这样的操作可能会涉及到整个树的其他部分,而skiplist的操作显然更加局部性一些,需要锁住的节点更少,因此在这样的情况下性能好一些。
http://www.yayakq.cn/news/297379/

相关文章:

  • 企业网查询天眼查哈尔滨seo网络推广
  • 网站维护费用青岛网站制作公司
  • 找人做淘宝网站做电影网站大概要多少钱
  • 网站设计怎么划分块网站建设固定资产投资
  • 做网站的公司电商网站现状分析
  • 网站建设服务器都有哪些临安区建设局网站
  • 做公司网站注意什么国内最好的软件网站建设
  • 杭州网站建设公司导航wordpress模板调用数据库
  • 北京网站建设需要多少钱电商平台网站制作
  • 中小企业网站的建设实践报告`北京网站建设
  • 漳州网站建设技术群辉域名登录wordpress
  • 怎样做网站seo优化500m网站空间
  • 阿里企业网站建设评估上海华谊集团建设有限公司网站
  • 策划方案免费网站网站死链怎么解决
  • 信息手机网站模板下载石家庄pc端网站建设
  • windows 2003建设网站软件定制软件开发公司
  • 网站开发如何修改域名东莞南城网站制作公司
  • 荆门哪里做网站wordpress s.w.org
  • 企业网站策划书制作广州网站制作信科建设
  • 用什么编程语言做网站好海西州住房建设局网站
  • 遂宁市住房与城乡建设厅网站正邦设计待遇怎么样
  • 公司网站设计定制家具网站怎么做
  • 台州铭企做的网站app展示网站
  • 南京最好的网站设计公司wordpress 仪表板主题
  • 网站设计师认证培训建立网站看病的经济问题
  • 免备案自助建站网站建设小学网站
  • 做软装有什么网站找图片网站建设和seo的工作好不好
  • 隆基泰和 做网站wordpress 设置文章模板
  • 电商网站建设开发一个阿里云怎么做两个网站
  • 网站建设与维护书籍推荐移动端网站推广