Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

https://zh.wikipedia.org/wiki/%E8%B7%B3%E8%B7%83%E5%88%97%E8%A1%A8

概述

  • 使得包含n个元素的有序序列的查找和插入操作的平均时间复杂度都是O(log n),优于数组的O(n)复杂度
  • 一个多层次的链表。与前一层(下面一层)链表元素的数量相比,每一层链表中的元素的数量更少。每一层是有序的

构造

跳跃列表是按层建造的。底层是一个普通的有序链表。每个更高层都充当下面列表的“快速通道”,在i层(下面的层)中的每个元素按某个固定的概率p(通常为1/21/4)出现在第i+1层(上面的层)中,直到当前层元素个数为1

每个元素平均出现在1/1-p个列表中,而最高层的元素(通常是在跳跃列表前端的一个特殊的头元素)在log{1/p}n个列表中出现。

查找

在查找目标元素时,从顶层列表、头元素起步。
算法沿着每层链表搜索,直至找到一个大于或等于目标的元素,或者到达当前层列表末尾。
如果该元素等于目标元素,则表明该元素已被找到;如果该元素大于目标元素或已到达链表末尾,则退回到当前层的上一个元素,然后转入下一层进行搜索。
举例见插入

每层链表中预期的查找步数最多为1/p,而层数为log{1/p}n,所以查找的总体步数为log{p}n/p,由于p是常数,查找操作总体的时间复杂度为O(logn)。而通过选择不同p值,就可以在查找代价和存储代价之间获取平衡。

插入

和查找类似
插入80

80<=30?

80<=30?no

80<=50?

80<=50?no

走到nil所以向下走
80<=70?

80<=70?no

80<=90?

80<=90?yes, insert

评论