首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跳跃

跳跃是基于链表的概率数据结构,完善了链表不易查询的缺点....跳跃的基本结构如下: 每一横向的链表子序列称为层; 每一纵向的相同值的节点序列称为塔; 链表的头部和尾部通常使用-INF(负无穷)和+INF(正无穷)表示; 通常,上一层的元素数量是下一层数量的一半....查找节点 跳跃是如何提高查找效率的呢? 将上图旋转45°,就会发现与二叉查找树是类似,遍历时可以快速跳过很多节点. 对于二叉查找树不熟悉的可以参考二叉树....也就是和抛硬币一样,要么正面,要么反面,并没有固定规律,也正是这种随机性,跳跃称为概率数据结构. 在元素数量足够多时,硬币正反的概率是相同的,所以基本也是上一层元素数量是下一层的一半....明显,跳跃在搜索时是从上层至下层的顺序,而添加时正好相反,是从下层至上层的顺序.

36010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis(2)——跳跃

    一、跳跃简介 跳跃(skiplist)是一种随机化的数据结构,由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced...性能考虑: 在高并发的情况下,树形结构需要执行一些类似于 rebalance 这样的可能涉及整棵树的操作,相对来说跳跃的变化只涉及局部 (下面详细说); 实现考虑: 在复杂度与红黑树相同的情况下,跳跃实现起来更简单...更进一步的跳跃 跳跃 skiplist 就是受到这种多层链表结构的启发而设计出来的。...二、跳跃的实现 Redis 中的跳跃由 server.h/zskiplistNode 和 server.h/zskiplist 两个结构定义,前者为跳跃节点,后者则保存了跳跃节点的相关信息,同之前的...int level; } zskiplist; 正如文章开头画出来的那张标准的跳跃那样。

    90430

    跳跃深入理解

    1、认识跳跃 redis 中 zset 是一个有序非线性的数据结构,它底层核心的数据结构是跳表。...红黑树在空间和时间效率上略胜跳跃一筹,但跳跃实现上相对简单,颇得程序猿们的青睐。redis和leveldb中都有采用跳表。...2、跳跃的提出 跳表首先由William Pugh在其1990年的论文《Skip lists: A probabilistic alternative to balanced trees》中提出。...3、设计思想 跳跃(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的目的。跳跃在 Redis 里没有其它用途。...通过图示查找过程,可以更加明白跳表的含义,因为查找过程确实是跳跃的,比线性查找省时。当数据量越来越大的时候,这种结构的优势就更加明显了。

    46220

    漫画:什么是跳跃

    拍卖行的商品总数量有几十万件,对应数据库商品的几十万条记录。 如果是按照商品名称精确查询还好办,可以直接从数据库查出来,最多也就上百条记录。 如果是没有商品名称的全量查询怎么办?...O(logN) 总体上,跳跃插入操作的时间复杂度是O(logN),而这种数据结构所占空间是2N,既空间复杂度是 O(N)。...O(logN) 总体上,跳跃删除操作的时间复杂度是O(logN)。 小灰和大黄并不知道,他们的这一解决方案和若干年后Redis当中的Sorted-set不谋而合。...而Sorted-set这种有序集合,正是对于跳跃的改进和应用。 对于关系型数据库如何维护有序的记录集合呢?使用的是B+树。有关B+树的知识,将在以后的漫画中详细介绍。 小伙伴们,感谢支持!

    28430

    跳跃原理和实现

    跳跃原理和实现 前提 有时候会被问到链表如果做到二分搜索,可能会有部分的人会去把链表中的值保存到数组来进行二分,但是如果知道跳跃的话,那么这个数据结构就可以解决这个困惑,它允许快速查询一个有序连续元素的数据链表...----by 发明者像是redis中有序集合就使用到了跳跃。...原理 性质 首先,应该要了解跳跃的性质; 由很多层结构组成; 每一层都是一个有序的链表,排列顺序为由高层到底层,都至少包含两个链表节点,分别是前面的head节点和后面的nil节点; 最底层的链表包含了所有的元素...跳跃的层数跟结构中最高节点的高度相同。...理想情况下,跳跃结构中第一层中存在所有的节点,第二层只有一半的节点,而且是均匀间隔,第三层则存在1/4的节点,并且是均匀间隔的,以此类推,这样理想的层数就是logN。

    83830

    跳跃确定不了解下😏

    在正式开始之前,我们需要引入下跳跃的概念,其是ZSET结构的底层实现。以下可能有点枯燥,我尽量说的简单点哈。 什么是跳跃? 对于数据量大的链表结构,插入和删除比较快,但是查询速度却很慢。...所以Redis的zset结构在数据量小的时候采用压缩,数据量大的时候采用跳跃。 像这种链表加多级索引的结构,就是跳跃。这名字起的形象,过程是跳跃着来查询的。...header:指向跳跃的表头节点,通过这个指针地址可以直接找到表头,时间复杂度为O(1)。 tail:指向跳跃尾节点,通过这个指针可以直接找到尾,时间复杂度为O(1)。...length:记录跳跃的长度,即不包含表头节点,整个跳跃中有多少个元素。 level:记录当前跳跃内,所有节点层数最大的level(排除表头节点)。...,先从跳跃是什么,引出跳跃的概念和数据结构,剖析了其主要组成部分,进而通过多幅过程图解释了Redis是如何设计跳跃的,最后结合源码对跳跃进行描述,如创建过程,添加节点过程,获取某个节点排名过程,

    62020

    Redis为什么要使用跳跃

    在大部分情况下,跳跃的效率可以和平衡树相媲美,并且因为跳跃的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃来代替平衡树。...以下是个典型的跳跃例子 http://static.cyblogs.com/skiplist.png 从图中可以看到, 跳跃主要由以下部分构成: 表头(head):负责维护跳跃的节点指针。...尾:全部由 NULL 组成,表示跳跃的末尾。...因为跳跃的定义可以在任何一本算法或数据结构的书中找到, 所以本章不介绍跳跃的具体实现方式或者具体的算法, 而只介绍跳跃在 Redis 的应用、核心数据结构和 API 。...❑Redis的跳跃实现由zskiplist和zskiplistNode两个结构组成,其中zskiplist用于保存跳跃信息(比如表头节点、尾节点、长度),而zskiplistNode则用于表示跳跃节点

    1.3K20
    领券