我正在寻找可以使用Object[]
数组而不是对象Node
来实现的优先级队列的堆结构。
二进制堆当然可以很好地工作,n 元堆也是如此。Javajava.util.PriorityQueue
是一个二进制堆,使用Object[]
数组作为存储。
还有很多其他堆,例如斐波那契堆,但据我所知,这些需要使用节点来实现。从我的基准测试来看,我的印象是管理所有这些节点对象所付出的开销可能会耗尽所有获得的收益。我发现很难实现一个可以使用简单的数组支持的二进制堆来实现的堆。
所以我目前正在寻找也没有使用Node
对象开销的高级堆/优先级队列结构。因为我希望它在现实中更快,而不仅仅是在复杂性理论中更好……而且现实中发生了更多事情:例如 CPU 有 L1、L2 和 L3 缓存等,它们确实会影响性能。
我的问题也集中在Java上,因为我在这里对内存管理几乎没有影响,并且没有struct
像在 C 中那样的 s。由于内存管理开销,在 C 中实现时运行良好的许多堆在 Java 中变得昂贵和垃圾收集费用。