我已经在Java中使用Fibonacci Heap实现了大约一个星期了。这是基于CLRS书籍的实施。
我想看看,与Java默认的PriorityQueue相比,我正在研究的侧面项目中是否会使用它来提升性能。 [Java中的默认实现是基于数组的,更本地化。尽管复杂性越来越高,它仍然可能超越F-Heap。
我的问题似乎源于删除min元素后堆的合并部分。我一直在抛出arrayindexoutofboundsexceptions。特别是在while循环中,当它整合所有具有相同程度的节点时。它超出了D()函数设置的范围。
所以我的D()函数是错误的,我认为不是,或者其他事情正在发生。最有可能产生副作用。
代码位于here。现在好运,我一直在努力调试这一周。我错过了一些明显的东西吗?
答案 0 :(得分:1)
您需要检查分析,因为我不确定节点度的上限是否应该是最低限度。在你的D函数中,你的强制转换是截断小数部分。将此更改为舍入似乎可以清除索引超出范围的错误。
但似乎还有一个问题。我没有追踪到什么条件,但是子列表最终可能没有setinal set。当循环遍历子列表时,这会导致removeMin中的无限循环,因为它们是循环的。