2015-06-11 26 views

回答

11

據我所知,沒有實際使用斐波那契堆或Brodal隊列的主要應用程序。 Fibonacci堆最初設計用於滿足理論而不是實際需要:漸近地加速Dijkstra的最短路徑算法。 Brodal隊列(以及相關的功能數據結構)的設計類似於滿足理論保證,具體來說,是爲了回答關於是否有可能將Fibonacci堆的時間範圍與最壞情況保證相比較而不是攤銷保證的長期懸而未決的問題。從這個意義上說,數據結構並不是爲滿足實際需要而開發的,而是爲了推進我們對算法效率極限的理論理解。據我所知,目前沒有算法在Fibonacci堆上使用Brodal隊列實際上會更好。

正如其他答案所指出的,隱藏在斐波那契堆或Brodal隊列中的常數因子非常高。他們需要在很多複雜的鏈表中連接很多指針,因此具有絕對可怕的引用位置,尤其是與標準二進制堆相比。這意味着,除非您有需要大量減少鍵操作的算法,否則它們在實踐中可能會在執行緩存效果時表現更差。有些情況下會出現這種情況(例如,鏈接的答案會談到其中的一些答案),但將它們視爲高度專業化的情況而不是常見用例。如果您正在處理巨大的圖表,則更常見的是使用其他技術來提高效率,例如對近期問題使用近似算法,更好的啓發式算法或使用底層數據的特定屬性的算法。

希望這會有所幫助!

+0

關於近似算法的重點。當問題變得足夠大以至於原則上可以從這些奇特的數據結構中獲益時,您可能願意採取一種近似方法,此時該方法會更快。 – kuzzooroo