高效实现二进制堆

时间:2011-06-30 07:46:43

标签: c++ data-structures performance computer-science priority-queue

4 个答案:

答案 0 :(得分:9)

关于此主题的一篇有趣的论文/文章考虑了缓存/分页对堆的整体布局的行为;这个想法是,与数据结构的实现几乎任何其他部分相比,支付缓存未命中或页面的成本要高得多。本文讨论了解决此问题的堆布局。

You're Doing It Wrong by Poul-Henning Kamp

答案 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]上有一个专用元素。