【发布时间】:2013-01-09 18:28:38
【问题描述】:
我正在寻找优先级队列的堆结构,可以使用Object[] 数组而不是 Node 对象来实现。
二进制堆当然工作得很好,n 元堆也是如此。 Java 的java.util.PriorityQueue 是一个二进制堆,使用Object[] 数组作为存储。
还有很多其他堆,例如斐波那契堆,但据我所知,这些需要使用节点来实现。从我的基准测试来看,我的印象是管理所有这些节点对象所付出的开销可能会消耗掉所有获得的收益。我发现很难实现一个可以与简单的数组支持的二进制堆兼容的堆。
所以我目前正在寻找高级堆/优先级队列结构,它们也没有使用Node 对象的开销。因为我希望它在现实中更快,而不仅仅是在复杂性理论中更好……而且在现实中发生了更多事情:例如 CPU 有 L1、L2 和 L3 缓存等,它们确实会影响性能。
我的问题也集中在 Java 上,因为我在这里对内存管理几乎没有影响,并且没有像 C 中那样的structs。很多堆在由于内存管理开销和垃圾收集成本,用 C 实现在 Java 中变得昂贵。
【问题讨论】:
标签: performance algorithm data-structures heap priority-queue