数据结构:跳表
一、跳表是什么跳表Skip List是一种支持快速查找、插入和删除的有序数据结构。它的底层仍然是链表但额外建立了多层“索引链表”让查找时可以跳过大量节点。可以把它理解成普通链表逐个节点寻找跳表先大步跳跃接近目标后再小步查找思想类似二分查找但更适合动态插入和删除二、为什么普通链表查找很慢假设有一个有序链表1 → 3 → 5 → 7 → 9 → 11 → 13 → 15查找13时只能从头开始逐个比较1 → 3 → 5 → 7 → 9 → 11 → 13时间复杂度是O(n)数组可以使用二分查找达到O(log n)但数组中间插入或删除元素通常需要移动大量数据复杂度为O(n)。跳表希望同时获得查找O(log n) 插入O(log n) 删除O(log n)这些是期望时间复杂度。三、跳表的基本结构在原始链表上建立多级索引Level 3: HEAD ----------------------→ 13 Level 2: HEAD --------→ 7 ----------→ 13 Level 1: HEAD → 3 ----→ 7 → 9 -----→ 13 Level 0: HEAD → 1 → 3 → 5 → 7 → 9 → 11 → 13 → 15其中Level 0保存全部节点越高层的节点越少高层用于快速定位底层用于找到精确位置每个节点可能同时存在于多层中例如节点7的逻辑结构可能是7.forward[0] → Level 0 的下一个节点 7.forward[1] → Level 1 的下一个节点 7.forward[2] → Level 2 的下一个节点实际上它通常是一个节点持有多个前向指针并不是复制出多个节点。四、查找过程以上面的跳表为例查找11。第一步从最高层开始HEAD → 13因为13 11不能前进于是下降一层。第二步在较低层前进HEAD → 77 11移动到7。下一个节点是13超过目标于是再次下降。第三步继续逼近目标在 Level 17 → 99 11移动到9。下一步会超过目标所以继续下降。第四步在底层精确查找9 → 11找到目标。核心规则是如果右侧节点小于目标向右移动 如果右侧节点大于等于目标下降一层伪代码current head 从最高层向下遍历: while current.forward[level] ! null and current.forward[level].value target: current current.forward[level] current current.forward[0] 如果 current.value target: 返回 current 否则: 返回不存在这个过程很像在二维结构中不断“向右、向下”移动。五、插入过程假设要插入8。5.1 找到每一层的前驱节点查找插入位置时记录每一层最后一个小于8的节点update[2] 7 update[1] 7 update[0] 7update数组表示新节点在每一层应该插到哪个节点后面5.2 随机生成节点高度跳表通常通过随机算法决定新节点拥有多少层以概率p 1/2为例level 0 只要抛硬币成功: level 1可能产生50% 的节点只有 Level 0 25% 的节点拥有 Level 01 12.5% 的节点拥有 Level 02 6.25% 的节点拥有 Level 03因此层数越高节点越少。5.3 修改指针假设8被随机为两层节点new.forward[0] update[0].forward[0] update[0].forward[0] new new.forward[1] update[1].forward[1] update[1].forward[1] new插入后Level 1: ... → 7 → 8 → 9 ... Level 0: ... → 7 → 8 → 9 ...重要的是寻找插入位置需要O(log n)修改指针本身只需要O(level)六、删除过程删除节点时同样先找到目标节点在每一层的前驱update[level]然后逐层检查如果 update[level].forward[level] 是目标节点: update[level].forward[level] target.forward[level]例如删除前7 → 8 → 9 删除后7 ─────→ 9如果删除后最高层已经没有任何数据节点可以降低跳表当前的最大层数。七、为什么随机层数能提高效率如果人为固定每隔两个节点建立一层索引Level 2: 1 -------→ 9 Level 1: 1 → 5 ---→ 9 → 13 Level 0: 1 → 3 → 5 → 7 → 9 → 11 → 13查找很快但插入节点后可能需要重新调整大量索引。跳表不维护严格的索引间隔而是随机决定节点高度。虽然局部结构不完全均匀但从概率上看第 0 层约有 n 个节点 第 1 层约有 n × p 个节点 第 2 层约有 n × p² 个节点 第 k 层约有 n × pᵏ 个节点当p 1/2时n, n/2, n/4, n/8, ...这与二分查找不断缩小范围的效果类似所以期望查找复杂度为O(log n)八、时间和空间复杂度操作平均/期望复杂度最坏复杂度查找O(log n)O(n)插入O(log n)O(n)删除O(log n)O(n)范围查询O(log n k)O(n)空间O(n)与最大层数设置有关这里k是范围查询返回的元素数量最坏情况可能是所有节点都只有最底层跳表退化成普通链表。不过在合理随机化和最大层数限制下这种情况概率很低当p 1/2时每个节点的期望指针数量为1 1/2 1/4 1/8 ... 2所以总空间仍然是O(n)。九、跳表和其他结构的对比数据结构查找插入/删除有序遍历特点有序数组O(log n)O(n)容易缓存友好普通链表O(n)找到位置后O(1)容易查找慢哈希表平均O(1)平均O(1)不支持适合精确查询平衡树O(log n)O(log n)支持保证最坏复杂度跳表期望O(log n)期望O(log n)支持实现简单、并发友好相比哈希表跳表支持查找大于等于 x 的第一个元素 查询 [left, right] 范围内的元素 按顺序遍历普通哈希表通常不能高效完成这些操作。相比平衡树跳表的优点不需要旋转操作插入、删除逻辑相对直观范围遍历自然某些并发场景更容易设计平衡树的优点最坏时间复杂度有严格的O(log n)保证通常不依赖随机数每个节点的结构更加固定

相关新闻

DalinX V12 三支柱落地实录:如何做到 C6=0、C2/C12 逐位不变的同时 C11 提升 +49%

DalinX V12 三支柱落地实录:如何做到 C6=0、C2/C12 逐位不变的同时 C11 提升 +49%

作者: 贾大林(Dalin Jia) 石家庄 项目: QN1 幻化引擎 DalinX V12 版本: 12.0.0 | 日期: 2026-07-24 声明: 私有非公开,不上 arXiv,git remote 恒空。本文记录 V12 三支柱(OAR / MTM / FAS)架构的完整落地过…

2026/7/24 20:28:37阅读更多 →
如何设计多Agent的协作与动态切换机制?

如何设计多Agent的协作与动态切换机制?

多 Agent 系统的核心问题不是“创建多个 LLM”,而是:如何让多个具有不同职责的 Agent,在共享目标下进行任务分工、通信、协作,并根据环境变化动态调整角色。可以把它理解成一个“AI团队”。例如一个机器人云平台:规划 …

2026/7/24 20:28:37阅读更多 →
限时公开:藤校招生官内部评分表映射的6维提示词框架(仅剩37份原始训练语料可复现)

限时公开:藤校招生官内部评分表映射的6维提示词框架(仅剩37份原始训练语料可复现)

更多请点击: https://kaifayun.com 第一章:藤校推荐信AI生成的底层逻辑与伦理边界 藤校推荐信AI生成系统并非简单模板填充工具,其底层依赖多模态语义建模与可信度约束机制。核心模型通常基于微调后的LLM(如Llama-3-70B或Qwen2-72…

2026/7/24 20:26:36阅读更多 →
CC35xx PRCM模块详解:电源、复位与时钟管理的嵌入式实战指南

CC35xx PRCM模块详解:电源、复位与时钟管理的嵌入式实战指南

1. 项目概述:深入理解CC35xx的PRCM模块在嵌入式无线MCU的开发中,尤其是面向电池供电的物联网设备,如何平衡性能与功耗是永恒的课题。很多开发者拿到芯片后,往往直奔外设驱动和应用层协议栈,却忽略了底层最关键的“地基…

2026/7/25 11:15:05阅读更多 →
智能体技术栈核心组件与实战优化解析

智能体技术栈核心组件与实战优化解析

1. 智能体技术生态全景解析 最近两年,智能体技术栈的快速发展正在重塑人机交互的格局。作为一名跟踪该领域多年的技术从业者,我观察到市场上对Agent(智能体)、Tool(工具)、Skill(技能&#xff0…

2026/7/25 11:15:05阅读更多 →
10款AI工具助力学术写作:从开题到答辩全流程指南

10款AI工具助力学术写作:从开题到答辩全流程指南

1. 项目概述:AI论文工具如何改变学术写作生态 去年指导表弟完成专科毕业论文时,我系统测试了市面上23款AI写作工具。最终筛选出的这10个神器,让原本写作吃力的他两周就完成了从开题到答辩的全流程。现在这些工具已经成为我们教研室的"秘…

2026/7/25 11:15:05阅读更多 →
Transformer模型精简技术与实践指南

Transformer模型精简技术与实践指南

1. Transformer模型为何需要精简? Transformer架构自从2017年提出以来,已经成为自然语言处理领域的标配模型。但原始Transformer的参数量动辄上亿,以BERT-base为例就有1.1亿参数,更不用说GPT-3这样的千亿参数巨无霸。这种规模带来…

2026/7/25 11:15:05阅读更多 →
TI CC3x20/CC3x3x NWP日志捕获实战:从硬件连接到二进制流抓取

TI CC3x20/CC3x3x NWP日志捕获实战:从硬件连接到二进制流抓取

1. NWP日志捕获:从原理到实战的深度解析在嵌入式Wi-Fi开发领域,当你面对一个“看起来正常”的模块却无法连接网络,或者连接时断时续、吞吐量异常时,那种无从下手的挫败感,相信很多工程师都深有体会。主机MCU的日志可能…

2026/7/25 11:15:05阅读更多 →
Claude模型成本优化:动态策略平衡AI推理质量与API开销

Claude模型成本优化:动态策略平衡AI推理质量与API开销

你肯定遇到过这种情况:面对一个复杂的代码重构任务,或者一篇需要深度分析的文档,你打开 Claude,输入问题,然后看着它开始“思考”——光标闪烁,一行行文字缓缓出现,仿佛真的在字斟句酌。你心里清…

2026/7/25 11:13:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →