066伸展树 (Splay Tree)
伸展树 (Splay Tree) — 5W1H故事与需求定义066伸展树极简的优雅Who谁发明者Daniel Dominic Sleator 和 Robert Endre Tarjan于1985年在论文《Self-Adjusting Binary Search Trees》中提出发表于Journal of the ACM。理论背景Robert Tarjan 同时也是斐波那契堆、不相交集合Union-Find等数据结构的发明人之一Sleator 则是竞争分析competitive analysis领域的奠基人。使用者GCC编译器链接器的符号表管理、网络路由缓存、数据库查询优化器凡具有访问局部性temporal locality特征的应用均是理想场景。What什么伸展树是一种自调整二叉搜索树核心思想每次访问搜索、插入、删除某节点后通过一系列旋转将该节点移至树根——称为伸展splay操作。三种伸展情形情形条件操作Zigx的父节点p是根对p单旋将x转为根Zig-Zigx与p在祖父g的同侧同左或同右先旋p再旋x避免退化Zig-Zagx与p在祖父g的异侧一左一右对x连续旋转两次摊销复杂度单次操作最坏 O(n)但 m 次操作总代价 O(m·log n)摊销 O(log n)无需存储额外的平衡信息无颜色、无高度字段。When何时访问模式具有时间局部性时近期访问的节点很快被再次访问伸展树优于AVL/红黑树因为热点节点自动移至根附近。需要最简实现时伸展树不需要额外的平衡信息颜色、高度代码更简洁。允许摊销分析、不要求单次操作的最坏保证时。竞技编程中因实现简洁常被采用。Where何处GCClibiberty中的符号表使用伸展树实现早期版本。Windows NT内核虚拟内存管理器使用伸展树管理VADVirtual Address Descriptor树。数据库缓冲池利用伸展树将热点页保持在树的浅层实现高效LRU近似。网络路由IP查找表的快速访问。Why为何自适应性频繁访问的元素自动靠近根形成访问频率越高越快的自然优化——无需额外缓存层。无额外存储相比红黑树1 bit颜色、AVL树2 bit高度差伸展树节点只需 key 三个指针空间更紧凑。实现简单核心逻辑仅三种旋转情形代码量远少于红黑树的5个修复情形。理论优雅Tarjan 用势能分析potential function Σ log(size(x))严格证明摊销 O(log n)是摊销分析的经典教学案例。How如何核心操作操作摊销复杂度说明splay(x)O(log n)将节点 x 旋转至根search(key)O(log n)BST查找 → 对找到或最近节点执行splayinsert(key)O(log n)BST插入 → 对新节点splaydelete(key)O(log n)search → 删除根 → 合并左右子树删除策略Splay 目标节点 z 至根。分离左子树 L 和右子树 R。在 L 中 splay 最大节点 m使 m 成为 L 的根m 无右孩子。令m-right R完成合并。需求定义功能需求ID需求描述F1splay_insert(t, key)插入整数 key忽略重复F2splay_search(t, key)搜索 key将最近访问节点splay至根找到返回节点指针否则返回 NULLF3splay_delete(t, key)删除 key 对应节点若存在F4splay_inorder(t, size)中序遍历返回有序整数数组调用者释放F5splay_create()/splay_destroy(t)创建和释放树性质约束ID约束描述P1搜索后被访问节点或其前驱成为根P2中序遍历始终输出有序序列BST性质不变P3空树上的搜索、删除、遍历操作不导致崩溃非功能需求摊销时间复杂度 O(log n)无内存泄漏C99 标准gcc -stdc99 -Wall无警告编译验收标准测试编号测试描述预期结果TC1插入[5,3,7,1,4,6,8]搜索所有 7 个键全部返回非 NULLTC2依次搜索1,7,4,8,3每次检查t-root-key每次搜索后根节点等于被搜索的键TC3对插入上述序列的树执行中序遍历输出严格递增序列[1,3,4,5,6,7,8]TC4删除键 3 和 7 后搜索已删除键搜索剩余键已删除键返回 NULL剩余键返回非 NULLTC5对空树调用search(42)、delete(99)、inorder不崩溃search返回NULLinorder返回空数组

相关新闻

提示词工程核心参数全解析:Temperature、Top-p与实战调参指南

提示词工程核心参数全解析:Temperature、Top-p与实战调参指南

这个标题看着简单,但"提示词工程的几个参数"恰恰是很多人在实际落地时最容易糊弄过去、最后又被逼回来反复调的一块。我见过不少团队,提示词写得花团锦簇,思维链用得飞起,结果一换模型、一调温度,输出质量直…

2026/10/4 11:43:07 阅读更多 →
提示词工程核心参数调优:温度、Top_p与惩罚系数全解析

提示词工程核心参数调优:温度、Top_p与惩罚系数全解析

做提示词工程这两年,我接过不少类型的项目,从内容生成、代码助手到结构化数据抽取都碰过。说实话,大部分人把精力全花在“怎么写提示词”上,却忽略了提示词背后那几个真正决定输出质量的旋钮——生成参数。提示词写得再漂亮&#…

2026/10/4 11:43:09 阅读更多 →
Superpowers实战:从开发环境自动化到AI编码协作的完整指南

Superpowers实战:从开发环境自动化到AI编码协作的完整指南

每次拿到一台新电脑,我的第一反应不是装 IDE,而是先跑一遍 superpowers 。为什么?因为我不想过那种“装完系统还得手动配 Java 环境、翻来覆去改 .zshrc、敲一堆重复命令”的日子。Superpowers 这个名字听起来有点中二,但它做的…

2026/10/4 11:41:48 阅读更多 →

最新新闻

需求分析报告编写规范:用Java实现docx章节结构自动校验

需求分析报告编写规范:用Java实现docx章节结构自动校验

简介:本资源以中国国防科学技术报告为规范范例,提供《需求分析报告》编写格式与内容要求的完整参考,面向软件项目管理者、需求分析人员及文档编写者,用于统一报告结构、提升需求文档规范性与完整性。压缩包内共1个docx文档&#x…

2026/10/4 13:50:02 阅读更多 →
Remote In Tech 公司档案实战解析:以 Nettl Edinburgh(nettl-edinburgh.md)为例

Remote In Tech 公司档案实战解析:以 Nettl Edinburgh(nettl-edinburgh.md)为例

数据集 【免费下载链接】remote-jobs Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies 项目地址: https://gitcode.com/GitHub_Trending/re/remote-jobs 点击查看 免费下载 本篇技术指南以 remoteintech.…

2026/10/4 13:50:02 阅读更多 →
BepInEx 安装教程:下载 + 解压 + 启动 3 步挂上插件框架,Unity 游戏 Mod 随装随跑

BepInEx 安装教程:下载 + 解压 + 启动 3 步挂上插件框架,Unity 游戏 Mod 随装随跑

BepInEx 安装教程:下载 解压 启动 3 步挂上插件框架,Unity 游戏 Mod 随装随跑 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你下载了一个 Mod&#xff…

2026/10/4 13:50:02 阅读更多 →
EasyDarwin 跨平台机器码获取指南:基于 machine-code 实现 PlatformUUID、主板序列号与精准 IP 采集

EasyDarwin 跨平台机器码获取指南:基于 machine-code 实现 PlatformUUID、主板序列号与精准 IP 采集

音视频后端直播视频 【免费下载链接】EasyDarwin open source、high performance、industrial rtsp streaming server,a lot of optimization on streaming relay,KeyFrame cache,RESTful,and web management,also EasyDarwin support distributed load balancing,a simple str…

2026/10/4 13:50:02 阅读更多 →
RISC-V入门必读:base ISA与ABI寄存器约定详解

RISC-V入门必读:base ISA与ABI寄存器约定详解

1. 从零上手 RISC-V:为什么 base ISA 和 ABI 寄存器约定是绕不开的第一道坎接触 RISC-V 的人,十有八九是从一块开发板或者一个模拟器开始的。你可能已经跑通了第一个裸机程序,或者用工具链编译了一个简单的 C 程序烧进去,看着串口…

2026/10/4 13:50:02 阅读更多 →
工业级嵌入式数据存储:MRAM与8位MCU的可靠组合

工业级嵌入式数据存储:MRAM与8位MCU的可靠组合

1. 项目概述:为什么在工业现场还要用MR25H40CDF配PIC18F85K22做数据存储?MR25H40CDF和PIC18F85K22这两个芯片组合,乍看像是从十年前的BOM清单里翻出来的老物件——一个4Mb串行磁阻RAM(MRAM),一个带硬件SPI模…

2026/10/4 13:49:02 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →