堆學習筆記

1、堆

  • 堆是一個完全二叉樹;
  • 堆中每一個節點的值都必須大於等於(或小於等於)其子樹中每個節點的值。

1.1 堆的實現

完全二叉樹比較適合用數組來存儲!

1.1 插入元素

往堆中插入一個元素後,需要繼續滿足堆的兩個特性。 如果我們把新插入的元素放到堆的最後 ,可能不滿足第二個特效,需要進行堆化。

堆化非常簡單,就是順着節點所在的路徑,向上或者向下,對比,然後交換。

1.2 刪除堆頂元素

從堆的定義的第二條中,任何節點的值都大於等於(或小於等於)子樹節點的值,我們可以發現,堆頂元素存儲的就是堆中數據的最大值或者最小值 。

把最後一個節點放到堆頂,然後利用同樣的父子節點對比方法。對於不滿足父子節點大小關係的,互換兩個節點,並且重複進行這個過程,直到父子節點之間滿足大小關係爲止。

2、堆排序

藉助於堆這種數據結構實現的排序算法,就叫作堆排序。

時間複雜度非常穩定,是O(nlog⁡n),並且它還是原地排序算法。

具體實現參考堆排序

3、堆應用

3.1 優先級隊列

優先級隊列,隊列最大的特性就是先進先出,在優先級隊列中,數據的出隊順序不是先進先出,而是按照優先級來,優先級最高的,最先出隊 。

往優先級隊列中插入一個元素,就相當於往堆中插入一個元素;從優先級隊列中取出優先級最高的元素,就相當於取出堆頂元素。

3.2 利用堆求 Top K

3.3 利用堆求中位數

具體實現參考堆應用

發佈了138 篇原創文章 · 獲贊 146 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章