簡體   English   中英

是否有Fibonacci堆的標准Java實現?

[英]Is there a standard Java implementation of a Fibonacci heap?

我正在研究不同類型的堆數據結構。

Fibonacci堆似乎具有更好的最壞情況復雜度(1)插入,(2)刪除和(2)找到最小元素。

我發現在Java中有一個類PriorityQueue是一個平衡的二進制堆。 但為什么他們不使用Fibonacci堆?

另外, java.util是否有Fibonacci堆的實現?

謝謝!

不,標准Java集合API不包含Fibonacci堆的實現。 我不確定為什么會這樣,但我相信這是因為雖然斐波那契堆在分攤意義上是漸近的,但它們在實踐中有很大的常數因素。 集合框架也沒有二進制堆,這將是另一個要包含的好堆。

作為一個完全無恥的自我插件,我在我的個人網站上用Java實現了Fibonacci堆 我不確定它會有多大用處,但是如果你很想知道它是如何工作的,我認為它可能是一個很好的起點。

希望這可以幫助!

但為什么他們不使用Fibonacci堆?

可能是因為那些堆每個條目的開銷比二進制密鑰多得多。

另外,Java.util中是否有Fibonacci堆的實現?

不是,但

  1. 有來自Nathan Fiedler-GPL的圖形制作者 ,並且具有良好的測試覆蓋率 ,但是看看這篇關於它的好文章以及斐波納契impl可能存在的問題。 在這篇文章中,引用了許多其他Java實現。
  2. 有一些代碼單元測試在這里
  3. JGraphT項目 (也是Nathan Fiedler)以及(一些次要的) 測試,但LGPL。
  4. 最后但並非最不重要的是Neo4j - GPL - 沒有測試。

但為什么他們不使用Fibonacci堆?

我認為主要原因是因為當你有更多的reduceKey操作連接到一個extractMin操作時,Fibonacci堆只能提供幫助。 例如,當您使用Dijkstra算法時。

另外,Java.util中是否有Fibonacci堆的實現?

Java.util中沒有實現,但我使用Fibonacci堆的現有開源版本對此主題進行了一些實驗。 您可以在我的博客項目的GitHub存儲庫中找到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM