有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Fibonacci堆问题

我已经用Java开发了一个Fibonacci堆实现大约一周了。这是基于CLRS手册的实现

我想看看,与Java默认的PriorityQueue相比,在我正在进行的一个辅助项目中使用它是否能提高性能。[Java中的默认实现是基于数组的,因此更具本地性。尽管复杂度有更高的界限,但它的性能仍可能优于F-Heap]

我的问题似乎源于移除min元素后堆的合并部分。我总是被人抛出各种各样的概念。特别是在while循环中,当它合并具有相同度数的所有节点时。它超出了D()函数设置的界限

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

代码位于here。我已经试着调试了大约一周,现在运气好。我是不是漏掉了什么明显的东西


共 (1) 个答案

  1. # 1 楼答案

    您需要检查分析,因为我不确定节点度的上限是否不应为楼层。在D函数中,对int的转换是截断小数部分。将其改为四舍五入似乎可以消除索引越界错误

    不过,似乎还有一个问题。我没有追踪到什么情况,但子列表最终可能没有一个前哨设置。这会导致在子列表中循环时,removeMin中出现无限循环,因为它们是循环的