我已经在 Java 中研究斐波那契堆实现大约一周了。它是基于 CLRS 书的实现。
我想看看与 Java 的默认 PriorityQueue 相比,在我正在处理的副项目中使用它是否会获得任何性能提升。[Java 中的默认实现是基于数组的,因此更加本地化。尽管复杂度更高,但它仍可能优于 F-Heap]。
我的问题似乎源于删除 min 元素后堆的合并部分。我不断收到 arrayindexoutofboundsexceptions 抛出。特别是在while循环中,当它合并具有相同度数的所有节点时。它超出了 D() 函数设置的范围。
所以要么我的 D() 函数是错误的,我不认为它是错误的,要么是发生了其他事情。最有可能与副作用有关。
代码位于此处。我一直在尝试调试这个大约一周,现在很幸运。我错过了一些明显的东西吗?