斐波那契堆(Fibonacci heap)是電腦科學中樹的集合。它比二項式堆積具有更好的平攤分析效能,可用於實現合併優先佇列。不涉及刪除元素的操作有O(1)的平攤時間。 Extract-Min和Delete的數目和其它相比,較小時效率更佳。稠密圖每次decrease key只要O(1)的平攤時間,和二項式堆積的O(lg n)相比是巨大的改進。
-- https://zh.wikipedia.org/wiki/斐波那契堆
Fibonacci heap 有兩個主要目的:
Mergrable heap 有以下五個操作:
圖 A 至 圖 B 展示如何將 node 21 插入,以下為虛擬碼:
FIB-HEAP=INSERT(H, x)
x.degree = 0
x.p = NIL
x.child = NIL
x.mark == False
if H.min == NIL
create a root list for H containing just x
H.min = x
else insert x intp H's root list
if x.key < H.min.key
H.min = x
H.n = H.n + 1
先產生須插入的節點,把新建的節點插入到根鏈表中,如果是最小值,則標記為堆的最小節點。插入位置沒有規定,一般插入到 min 的左邊。並把堆的「所有節點樹」值加 1