代码之家  ›  专栏  ›  技术社区  ›  Nicholas Mancuso

斐波那契堆问题

  •  2
  • Nicholas Mancuso  · 技术社区  · 16 年前

    我想看看与Java的默认PriorityQueue相比,在我正在进行的副项目中使用它是否会提高性能。[Java中的默认实现是基于数组的,因此更具局部性。尽管复杂性更高,但它仍然可能优于F-Heap]。

    我的问题似乎源于删除min元素后堆的合并部分。我总是抛出arrayindexout-ofbound概念。具体来说,在while循环中,当它合并具有相同程度的所有节点时。它超出了D()函数设置的界限。

    所以要么我的D()函数错了,我不认为是这样,要么发生了其他事情。最有可能的副作用是相关的。

    代码位于 here 。我已经试着调试这个大约一周了,现在很幸运。我错过了什么明显的东西吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Stephen Pellicer    16 年前

    你需要检查分析,因为我不确定节点度的上限是否不应该是地板。在D函数中,强制转换为int是截断小数部分。将此更改为四舍五入似乎可以清除索引越界错误。