这个数据结构很陌生。跳跃表是一个有序的数据结构,每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
跳跃表支持平均logn复杂度,最坏O(n)复杂度的节点查找。还可以通过顺序操作批量处理节点。
大部分情况下,跳跃表的效率可以和平衡树媲美,而且跳跃表实现较为简单,很多程序用跳跃表代替平衡树。
跳跃表作为有序集合键的底层实现。如果一个有序集合包含元素数量较多或者元素的成员是比较长的字符串,就会使用跳跃表。
1、跳跃表的实现
对于跳跃表节点:
1、层:对于level数组,可以有多个元素,每个元素包含一个指向其他节点的指针,一般来说,层数越多,访问其他节点的速度越快。
每次创建一个新的节点,程序会根据幂次定律(越大的数出现概率越小)随机生成一个1到32之间的数作为level数组的大小
2、跨度
跨度和遍历操作没有关系,用前进指针就可以完成遍历操作。
跨度是用来计算排位的,在查找某个节点过程中,将沿途所有跨度累加,就是目标节点在跳跃表中的排位。
3、后退指针:用于从后往前遍历。后退指针一次只能后退一次。用tail指向表尾然后依次遍历。
4、成员和分值;分值从小到大排列,成员必须是唯一的,分值可以相同。
而zskiplist使访问表头表尾节点,跳跃表长度等称为O(1)复杂度。