1.
(1)斐波那契堆是由一組最小堆有序樹構成,這裡的樹並不一定是二項樹;
(2)斐波那契堆中的樹都是有根無序的,而二項堆中的根是按照嚴格遞增的順序排列的
2結構:
(1)parent
(2) child(任一孩子)
(3)left, right(節點的左右兄弟;如果y是獨子 那麼left=right=y ;節點與其兄弟組成環形雙鏈表)
(4)degree 孩子的個數
(5)mark(true或者false ,與堆的結構無關與具體的演算法有關)
(6)key
3.節點x的所有節點組成環形雙鏈表,稱為x的子女表;這樣的好處是:可以在o(1)時間內將某個節點從環形雙鏈表中去掉,其次,如果給定兩個這樣的表,可以在o(1)時間裡將他們連線成為乙個環形鍊錶。
最小節點:min(h) 包含最小關鍵字的樹根
4.插入和尋找最小節點
插入:與 binomialheap的插入不同,fibheap的插入並不對斐波那契堆中的樹進行合併,直接將節點插入到根表中,如果連續插入k次,則有k棵單節點的樹被加到了根表中;
最小節點:最小節點在根表中,由min(h)指著,所以常量時間可以返回最小節點
5.合併:將乙個堆的根插入另乙個堆的根表中
6.取出最小節點
(1)將要抽取最小結點的子樹都直接串聯在根表中;
(2)合併所有degree相等的樹,直到沒有相等的degree的樹。
斐波那契堆
以下是實現的程式 肯定可以再優化的。include include include include using namespace std class node delete m child m child null class fibonacciheap node insert int key v...
斐波那契堆
ifndef finbonacci heap h define finbonacci heap h include stdlib.h include math.h define error0 printf error at file s line d n file line 定義乙個求有符號的無窮大...
斐波那契堆
斐波那契堆同二項堆一樣,也是一種可合併堆。相對於二項堆,斐波那契堆的優勢在於如果不涉及刪除元素的操作,則它的平攤執行時間為o 1 但是由於其演算法過於複雜,因而實際上更多的是用二項堆。乙個斐波那契堆具有如下性質 堆有一組有序樹組成,但是堆中的樹不一定是二項樹 斐波那契堆中的樹之間是無序的 二項堆中的...