斐波那契堆所有操作分析均爲攤銷性質。爲什麼不能像二項式堆一樣進行正常分析?爲什麼我們要對斐波納契堆進行攤銷分析?
0
A
回答
0
在二項堆中,每個操作都保證以某種最差情況下的性能運行。插入永遠不會超過時間O(log n),合併永遠不會超過時間O(log n + log m)等等。因此,在分析二項堆的效率時,通常使用更多傳統的算法分析。
現在,這就是說,有二項式堆的幾個屬性,只有在進行攤銷分析時才變得明顯。例如,假設堆最初是空的,那麼連續n次插入二項堆的成本是多少?您可以證明,在這種情況下,插入的攤銷成本爲O(1),這意味着執行n次插入的總成本爲O(n)。從這個意義上講,在傳統分析的基礎上使用分期分析可以揭示出比最保守的最壞情況分析最初可能出現的數據結構更多的見解。
從某種意義上說,斐波那契堆最好以分期償付的方式進行分析,因爲儘管許多操作的最壞情況邊界確實不是很好(例如,刪除分鐘或減少鍵可能需要在最壞的情況下,時間爲Θ(n)),在任何一系列操作中,斐波那契堆都具有出色的攤銷性能。即使單個刪除分鐘可能花費Θ(n)時間,一系列m個刪除分鐘也不可能花費超過Θ(m log n)時間。
從另一個角度來說,斐波那契堆是專門設計用來在攤銷意義上而非最壞情況下有效的。它們最初是爲了加速Dijkstra和Prim的算法而發明的,其中所有重要的是在n節點堆上執行m個減鍵和n個刪除的總成本,並且因爲這是設計目標,所以設計者沒有嘗試在最壞的情況下使斐波納契堆有效。
相關問題
- 1. 爲什麼斐波納契堆稱爲斐波那契堆?
- 2. 爲什麼斐波納契堆需要級聯切割?
- 3. Clojure斐波納契
- 4. 時間memoized斐波納契
- 5. 斐波納契java程序
- 6. Fortran斐波納契困境
- 7. 存儲斐波納契值
- 8. 斐波納契數的和
- 9. 打印斐波納契數
- 10. 斐波納契數字
- 11. 斐波納契數字c
- 12. 尾遞歸斐波納契
- 13. 斐波納契編碼
- 14. 瞭解Monadic斐波納契
- 15. SML斐波納契大數
- 16. 嵌套斐波納契?
- 17. 斐波納契遞歸
- 18. 斐波納契數列
- 19. 斐波納契數列
- 20. X86斐波納契程序
- 21. 遞歸斐波納契
- 22. 斐波那契和非斐波納契編碼
- 23. 並行斐波納契數計算器
- 24. 爲什麼斐波納契堆保持全局節點計數器?
- 25. 斐波那契堆問題
- 26. 分析複雜的代碼(斐波納契數列)
- 27. 爲什麼鏗鏘不會用斐波那契的constexpr版本計算斐波納契(500)?
- 28. 佩爾堆,就像斐波那契堆
- 29. 巨大的斐波納契數字
- 30. 判斷兩個斐波納契數
謝謝我得到了我的答案,這也是根源樹木的懶惰鞏固 – Moody