【问题标题】:Fibonacci Heap Issue斐波那契堆问题
【发布时间】:2010-11-24 04:54:39
【问题描述】:

我已经在 J​​ava 中研究斐波那契堆实现大约一周了。它是基于 CLRS 书的实现。

我想看看与 Java 的默认 PriorityQueue 相比,在我正在处理的副项目中使用它是否会获得任何性能提升。 [Java 中的默认实现是基于数组的,因此更加本地化。尽管复杂度更高,但它仍可能优于 F-Heap]。

我的问题似乎源于删除 min 元素后堆的合并部分。我不断收到 arrayindexoutofboundsexceptions 抛出。特别是在while循环中,当它合并具有相同度数的所有节点时。它超出了 D() 函数设置的范围。

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

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

【问题讨论】:

    标签: java debugging data-structures heap fibonacci-heap


    【解决方案1】:

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

    但似乎还有一个额外的问题。我没有追查什么条件,但子列表最终可能没有前哨集。这会在子列表中循环时导致 removeMin 中的无限循环,因为它们是循环的。

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 2012-12-16
      • 1970-01-01
      • 2016-11-18
      • 2010-12-19
      • 2013-02-24
      • 1970-01-01
      • 2011-05-19
      • 2017-11-18
      相关资源
      最近更新 更多