Skip to content

模型Model

跳表

施工中 · 内容逐步修订

skip list

用独立几何高度建立多层稀疏链表,以期望对数时间支持有序字典操作。

形式陈述 ​

层级模型 ​

Skip list 以随机层高实现有序字典/集合 ADT。键具有一致的全序,第 0 层含全部不同键,多层链表保存前向指针。固定常数 0<p<1,每个节点独立地按同一几何分布选择层高:从第 0 层起,以概率 p 继续晋升,故

Pr[H(x)≥k]=pk.

搜索从最高层头节点出发,能向右且不越过目标就前进,否则下降一层。每个键至多占一个节点,映射模式还在节点中保存其关联值。插入先查找已有键:若命中,映射模式覆盖旧值并保留原有层高,集合模式不作修改;只有新键才独立抽取高度并接入各层。删除在节点出现的每层断链。

时间与空间 ​

按照随机化算法的量词,下面先固定与层高抽样独立的键集和查询。节点指针数期望为 ∑k≥0pk=1/(1−p),总期望空间 O(n)。反向观察搜索路径:每层期望经过 1/p 个节点,最高非空层以高概率为 O(log1/p⁡n);因此期望搜索 O(log⁡n),并可由几何尾和并集界得到高概率高度界。

直觉

每一层都是对下一层的独立稀疏抽样,搜索在高层跨过大段键区间,接近目标后逐层下降。几何高度让最高塔只有对数级,每层反向经过的节点数又有常数期望,因此无需全局旋转也能得到期望对数路径。

跳表搜索路径
例子与边界

快车道例子 ​

底层存放全部时间戳;较高层只保留逐级抽样的时间戳。查询某一时刻先在稀疏层跨过大片区间,接近目标后下降到底层。这与给链表额外固定步长索引不同:随机高度使任何插入位置都不需要整体重排。

边界与接口 ​

这些不是最坏界;随机源退化或能观察结构的自适应对手可能制造更细的条件问题。工程实现常设最大层,截断概率分布后须重新写高度保证。范围报告先定位左端点再顺底层输出,期望成本是 O(log⁡(n+1)+k),不能漏掉输出量 k。并发 skip list 的内存回收与线性化点是额外正确性问题,不由这里的顺序概率分析覆盖。

推论与应用

插入路径与尾界 ​

搜索时保存每层最后一个小于目标的节点 update[ℓ],再检查第 0 层后继是否就是目标键。已有键按上面的覆盖或无操作规则处理,不重新抽样。对新键抽出高度 h 后,只在 0,…,h 层把 update 的 next 改指新节点,再让新节点指向原后继;若 h 超过当前最高层,新增层以前驱头节点开始。由此每层有序链和每键唯一节点的不变量都得到保持。

对 n≥1 和任意常数 c>1,对各节点的高塔事件取并集界,得到存在高度至少 clog1/p⁡n 的节点概率至多

npclog1/p⁡n=n1−c.

这是对最高层的高概率界;完整搜索步数还需结合每层水平移动的几何尾,不能只由“高度低”一句推出。

一条搜索路径的账 ​

搜索键 37 时,指针可能依次经过“顶层右移到 24、下降、右移到 32、下降两层、右移到 35”。从目标位置反向看,每层连续跨过未晋升节点的步数受几何尾控制。对通常的 O(log1/p⁡n) 层逐层累加期望水平步数,再计入更高层的尾部贡献,可得期望 O(log⁡n) 搜索时间。

参考资料
  • William Pugh, Skip Lists: A Probabilistic Alternative to Balanced Trees, CACM, 1990.
  • Michael Mitzenmacher, Eli Upfal, Probability and Computing, 2nd ed., Cambridge University Press, 2017, randomized data structures chapters.
关系图谱13 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系