是否有波那契堆的标准 Java 实现?

2022-09-01 04:30:48

我正在研究不同类型的堆数据结构。

斐波那契堆似乎具有更好的最坏情况复杂性,用于(1)插入,(2)删除和(2)查找最小元素。

我发现在Java中有一个类是一个平衡的二进制堆。但是为什么他们没有使用斐波那契堆呢?PriorityQueue

另外,在 中是否有斐波那契堆的实现?java.util

谢谢!


答案 1

不可以,标准 Java 集合 API 不包含斐波那契堆的实现。我不确定为什么会这样,但我相信这是因为虽然斐波那契堆在摊销意义上是渐近的,但它们在实践中具有巨大的恒定因素。集合框架也没有二项式堆,这将是另一个要包含的好堆。

作为一个完全无耻的自我插入,我在我的个人网站上有一个Java的斐波那契堆的实现。我不确定它有多大用处,但如果你好奇它是如何工作的,我认为这可能是一个很好的起点。

希望这有帮助!


答案 2

但是为什么他们没有使用斐波那契堆呢?

可能是因为这些堆的每个条目的开销比二进制键多得多。

另外,在Java.util中是否有斐波那契堆的实现?

不,但是

  1. 有来自Nathan Fiedler的图形制作者 - GPL,并且具有良好的测试覆盖率,但是看看这个关于它的不错的博客文章以及斐波那契impl可能遇到的问题。在这篇文章中,还引用了许多其他Java实现。
  2. 这里有一些带有单元测试的代码
  3. JGraphT项目(也是Nathan Fiedler)以及(一些次要的)测试,但LGPL。
  4. 最后但并非最不重要的一点是Neo4j - GPL - 没有测试。

推荐