Sync Heap: 先删除,后提问
摘要
本文介绍了 sync heap,一种新颖的数据结构,它将删除操作与揭示被删除元素解耦,使得在有限检查下插入和删除操作具有常数摊销时间复杂度,并将一个教科书中的调度问题从 O(n log n) 改进到 O(n)。
<p><a href="https://lobste.rs/s/a371nr/sync_heap_delete_first_ask_questions">评论</a></p>
查看缓存全文
缓存时间: 2026/08/25 17:45
# 同步堆:先删除,再询问
来源:https://arxiv.org/abs/2608.07134
查看PDF (https://arxiv.org/pdf/2608.07134)
> 摘要:堆(优先队列)是计算机科学中被研究得最透彻的数据结构之一。本文对教科书中的一项传统假设进行了批判性反思,该假设认为在比较模型中,插入元素和删除最小值这两个标准的堆操作中至少有一个必须耗费对数时间。通过将删除操作本身与向用户揭示被删除元素身份这一行为解耦,我们突破了排序障碍,并在堆操作复杂度之间建立了一种全新的权衡关系。这表明,对数级障碍并非删除最小值操作本身固有的代价,而是立即获知哪个元素被删除所带来的信息代价。在用户仅以常数次频率检查堆状态的特殊情况下,我们证明了插入和删除操作均可以均摊常数时间实现。作为一个应用,我们将一个教科书式的单位时间调度问题的运行时间从 $\mathcal{O}(n \log n)$ 改进到了最优的 $\mathcal{O}(n)$。我们的成果是通过设计一种新的数据结构——同步堆——而获得的,该结构通过重排和压缩其操作来提升速度,直到查询迫使它进行同步并揭示其状态。作为一个关键组件,我们使用了Chazelle在其最小生成树算法中引入的软堆。我们的数据结构简单、基于比较且是确定性的,我们的结果在渐进意义上是最优的。
## 提交历史
来自:Egor Gorbachev [查看邮件 (https://arxiv.org/show-email/205aaaa6/2608.07134)] **[版本1]** 2026年8月7日,星期五,11:53:20 UTC (35 KB)相似文章
为什么我们不允许栈是稀疏的,而不是强制它们连续?
本文讨论了为什么栈在内存中被设计为连续而不是稀疏的,重点介绍了诸如Stack Clash之类的安全风险以及异常处理中的实现复杂性。
双端栈分配器
一篇技术博客文章,介绍双头(碰撞式)栈分配器。这是一种经典的快速内存分配技巧,源于 Surreal Software 的游戏动画编程实践,其中内存分配只需一次整数加法,而内存释放则通过重置栈顶指针完成。
广义同步的局限:架构、权衡与决策因素的分类体系
本论文来自阿尔托大学,提出了同步架构的分类体系,分析了权衡与决策因素,以指导广义同步引擎的设计。
Dostoevsky:通过自适应移除多余合并来优化基于 LSM-Tree 的键值存储的空间-时间权衡
本文提出了 Dostoevsky 系统,通过在压缩(compaction)过程中自适应地移除多余的合并操作,改善基于 LSM-Tree 的键值存储的空间-时间权衡,性能优于现有的压缩策略。
过早优化有时也挺有趣
一篇探讨为存储ping时间戳优化环形缓冲区数据结构的博客文章,讨论了标签联合、位域和结构体填充以减少内存占用。