跳跃表

这个数据结构很陌生。跳跃表是一个有序的数据结构,每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
跳跃表支持平均logn复杂度,最坏O(n)复杂度的节点查找。还可以通过顺序操作批量处理节点。
大部分情况下,跳跃表的效率可以和平衡树媲美,而且跳跃表实现较为简单,很多程序用跳跃表代替平衡树。

跳跃表作为有序集合键的底层实现。如果一个有序集合包含元素数量较多或者元素的成员是比较长的字符串,就会使用跳跃表。

1、跳跃表的实现
在这里插入图片描述

对于跳跃表节点:
在这里插入图片描述

1、层:对于level数组,可以有多个元素,每个元素包含一个指向其他节点的指针,一般来说,层数越多,访问其他节点的速度越快。
每次创建一个新的节点,程序会根据幂次定律(越大的数出现概率越小)随机生成一个1到32之间的数作为level数组的大小

2、跨度
跨度和遍历操作没有关系,用前进指针就可以完成遍历操作。
跨度是用来计算排位的,在查找某个节点过程中,将沿途所有跨度累加,就是目标节点在跳跃表中的排位。

3、后退指针:用于从后往前遍历。后退指针一次只能后退一次。用tail指向表尾然后依次遍历。

4、成员和分值;分值从小到大排列,成员必须是唯一的,分值可以相同。

而zskiplist使访问表头表尾节点,跳跃表长度等称为O(1)复杂度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值