跳跃表
1.简介
一个有序的数组/链表,进行插入和查询操作:
- 对于有序数组,二分查找时间复杂度为O(logN),但是插入的时候需要移动元素为O(N),总时间复杂度为O(N)
- 对于有序链表,查找时间复杂度为O(N),插入为O(1),总的为O(N)
综上来看,两种方法都不好,但是我们希望在查找的时候像二分,插入的时候像链表,所以有了跳跃表,像下图这样
- 主体部分是链表,方便插入和操作
- 有多层,用于进行类似二分的查询

2.查询操作
步骤: 从上层开始,若查找成功返回;查找到比自身大的节点A,返回节点A的前驱节点B,从B进入下一层,以此循环直到结束
这里以查找29为例:
-
从3层的head开始,查找到45,比29大,返回3层的head,进入下一层,该过程查询次数为1
![]()
-
从2层的head开始,查找到16,比29小,那么继续走,查找到45,比29大,返回16那个节点,进入下一层,该过程查询次数为2
![]()
-
从1层的16开始,查找到29,查找成功,查询次数为1,总查询次数为4次
![]()
3.插入操作
每次插入操作,使用“抛硬币”方法,若为“正”,向上加一层;为“反”,停止加层,插入结束
比如,向下插入66,第一次抛硬币为“正”,那么向上加一层

第二次抛硬币为“反”,那么停止加层,插入操作结束。




浙公网安备 33010602011771号