演算法筆記 堆

2021-10-18 07:33:06 字數 1095 閱讀 1322

堆是一種特殊的樹形資料結構,一般討論的堆都是二叉堆。堆的特點是根結點的值是所有結點中最小的或者最大的,並且根結點的兩個子樹也是乙個堆結構。

堆是一種比較特殊的資料結構,可以被看做一棵樹的陣列物件,具有以下的性質:

• 堆中某個節點的值總是不大於或不小於其父節點的值;

• 堆總是一棵完全二叉樹。

將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。

堆的定義如下:n個元素的序列當且僅當滿足下關係時,稱之為堆。

(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2),滿足前者的表示式的成為小頂堆,滿足後者表示式的為大頂堆,這兩者的結構圖可以用完全二叉樹排列出來,示例圖如下:

因為堆有序的特點,一般用來做陣列中的排序,稱為堆排序。

以下2道題為leetcode中幾道典型習題,該型別題中可以看到都巧妙的用到了stl容器,降低演算法難度,建議練一下相關習題。

案例如下:

輸入:nums=[1,1,1,2,2,3],k=2

輸出:[1,2]

vector<

int>

topkfrequent

(vector<

int>

& nums,

int k));

for(

int i=

0;i)return vec;

}

案例如下:

matrix = [

[ 1, 5, 9],

[10, 11, 13],

[12, 13, 15]

],k = 8,

返回 13。

int

kthsmallest

(vector

int>>

& matrix,

int k)

}return q.

top();

}

《演算法筆記》堆

堆的常用操作 新建堆,插入元素,刪除堆頂 理論 1 downadjust low,high 的作用是調整這個閉區間範圍內的元素,使其滿足堆的性質 呼叫此函式的前提是除了low之外,其他節點滿足堆的性質 2 createheap 在建堆時是倒著從第乙個非葉節點元素開始呼叫downadjust 3 de...

演算法 之 堆 建立堆

給出乙個有n個元素的陣列a 1.n 要建立乙個包含這些元素的堆,可以這樣進行 從空的堆開始,不斷插入每乙個元素,直到a完全被轉移到堆中為止。因為插入第j個鍵值用時o log j 因此用這種方法建立堆疊的時間複雜性是o n log n 我們知道對應於堆h 1.n 的樹的節點可以方便地以自頂向下 從左到...

演算法筆記 資料結構 堆

堆是一棵完全二叉樹,樹中每個結點的值都不小於 或者不大於 其左右孩子結點的值 對於給定初始序列,如何建堆?給定陣列 85,55,82,57,68,92,99,98,66,56 建堆過程如下 利用陣列來儲存完全二叉樹,這樣結點就按層序儲存與陣列中,其中第乙個結點將儲存於陣列的1號位,並且陣列i號位表示...