答案 0 :(得分:9)
关于此主题的一篇有趣的论文/文章考虑了缓存/分页对堆的整体布局的行为;这个想法是,与数据结构的实现几乎任何其他部分相比,支付缓存未命中或页面的成本要高得多。本文讨论了解决此问题的堆布局。
答案 1 :(得分:3)
作为@ TokenMacGuy帖子的详细说明,您可能需要查看cache-oblivious data structures。我们的想法是构建数据结构,对于任意缓存系统,最小化缓存未命中数。它们很棘手,但从你的角度来看它们实际上可能很有用,因为它们即使在处理多层缓存系统时也表现良好(例如,寄存器/ L1 / L2 / VM)。
实际上a paper detailing an optimal cache-oblivious priority queue可能会引起人们的兴趣。这种数据结构在速度方面具有各种优势,因为它会尽量减少每个级别的缓存未命中数。
答案 2 :(得分:1)
我不知道你是否错过了二进制堆维基页面上的这个链接,或者你认为它不值得,但无论如何: http://en.wikipedia.org/wiki/B-heap
答案 3 :(得分:0)
关于第一点:即使为基于阵列的实施提供“备用点”也不是浪费。无论如何,许多操作都需要临时元素。
,而不是每次初始化一个新元素,在index [0]上有一个专用元素。