簡體   English   中英

為什么我們要對斐波那契堆進行攤銷分析?

[英]Why we do Amortized Analysis for Fibonacci Heap?

在斐波納契堆中,所有操作分析本質上都是攤銷的。 為什么不能像二項式堆一樣進行正常分析。

在二項式堆中,保證每個操作都以一定的最壞情況性能運行。 插入將不會超過時間O(log n),合並將不會超過時間O(log n + log m),依此類推。因此,在分析二項式堆的效率時,通常使用更多傳統算法分析。

就是說,二項式堆的一些屬性只有在進行攤銷分析時才變得明顯。 例如,假設堆最初是空的,那么對二項式堆進行n次連續插入的成本是多少? 您可以證明,在這種情況下,插入的攤銷成本為O(1),這意味着進行n次插入的總成本為O(n)。 從這個意義上講,與傳統的最壞情況分析最初可能得出的結論相比,在傳統分析之上使用攤銷分析可以揭示更多關於數據結構的見解。

從某種意義上說,最好以攤銷的方式分析斐波那契堆,因為即使許多操作的最壞情況范圍實際上並不是那么大(例如,delete-min或reduce鍵可能要花費時間Θ(n )(在最壞的情況下),在任何系列的操作中,斐波那契堆均具有出色的攤銷性能。 即使單個刪除分鍾可能花費Θ(n)時間,一系列m刪除分鍾也絕不可能花費超過Θ(m log n)時間。

不過,從另一種意義上說,斐波納契堆是經過專門設計的,在攤銷意義上而不是最壞情況意義上說是高效的。 最初是為了加快Dijkstra和Prim的算法而發明的,其中重要的是在n節點堆上執行m個減小鍵和n個刪除操作的總成本,並且由於這是設計目標,因此設計人員沒有做出任何嘗試。在最壞的情況下提高斐波那契堆的效率。

暫無
暫無

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

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