二叉堆(Heap)的學習

 定義:在一棵完全二叉樹中,滿足A[Parent[i]] <= A[i](小根堆爲例)。

性質1:Parent[i] = i/2; Left[i] = i*2; Right[i] = i*2+1;

性質2:高度爲h的堆,元素對多 個,最少 個;

性質3:含n個元素的堆的高度爲floor(lg n);

性質4:當用數組表示存儲了n個元素的堆時,葉子結點的下標是floor(n/2)+1……n

操作:

1.       heapify(int k)

前提條件是其子結點滿足堆的性質,則操作完成後,以該點給根的樹也滿足堆的性質:

2.       decrease(int k)

當一個元素的值減小時,應該往上冒泡去找適合自己的位置;增加元素可以理解爲一個點的權值從+Infinite改到了當前值,所以也可以用這個操作;

3.       extract():int

刪除根結點,並返回權值大小

4.       increase(int k)

增加一個新的結點

 

 

5.build(int size)

數組狀態下以O(n)的複雜度建堆

 

基本就這些,把這些代碼熟記於心後,就要具體問題具體處理了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章