資料結構 優先順序佇列(堆)

2021-10-02 14:21:39 字數 2362 閱讀 3607

一、堆

0、預備知識

①使用陣列儲存二叉樹結構,方式即將二叉樹用層序遍歷方式放入陣列中。這種方式的主要用法就是堆的表示。

②在陣列中:左孩子(left)下標 = 2 * parent + 1;

右孩子(right)下標 = 2 * parent + 2;

雙親(parent)下標 = (child - 1) / 2;

1、堆的概念

① 堆在邏輯上是乙個完全二叉樹。

②堆在物理實現上是儲存在陣列中的。

③大堆和小堆:滿足任意結點的值都大於其子樹中結點的值,叫做大堆,反之叫小堆。

④ ※堆的基本作用是,快速找集合中的最值

2、堆的操作——向下調整

前提: 要調整的結點左右子樹必須已經是乙個堆。

說明:1.array 代表儲存堆的陣列

2.size 代表陣列中被視為堆資料的個數

3.index 代表要調整位置的下標

4.left 代表 index 左孩子下標

5.right 代表 index 右孩子下標

6. min 代表 index 的最小值孩子的下標

7. 向下調整一次的時間複雜度為log2n

public

static

void

shiftdown

(int

array,

int size,

int index)}if

(array[index]

<= array[min]

)int t = array[index]

;// 否則,交換 array[index] 和 array[min] 的值

array[index]

= array[min]

; array[min]

= t;

index = min;

//然後因為 min 位置的堆的性質可能被破壞,

// 所以把 min 視作 index,向下重複以上過程

left =

2* index +1;

}}

3、堆的操作——建堆

使用向下調整把乙個不是堆的陣列變成堆。

時間複雜度為nlog2n

思路:從倒數的第乙個非葉子節點的子樹開始調整,一直調整到根節點的樹,就可以調整成堆。

public

static

void

createheap

(int

array,

int size)

}

4、堆的應用——優先順序佇列

是一種不同於先進先出佇列的佇列。每次從佇列中取出的是有最高優先權的元素,有兩個操作入佇列出佇列(出優先順序最高的)常使用堆來構建。

① 入隊(大堆):

過程:以大堆為例

1. 首先按尾插方式放入陣列

2. 比較其和其雙親的值的大小,如果雙親的值大,則滿足堆的性質, 插入結束

3. 否則,交換其和雙親位置的值,重新進行 2、3 步驟

4. 直到根結點

public

static

void

shiftup

(int

array,

int index)

int t = array[parent]

;//2.否則,交換其和雙親位置的值,重新進行 2、3 步驟

array[parent]

= array[index]

; array[index]

= t;

index = parent;

}}

②出隊(優先順序最高的)

過程:為了防止破壞堆的結構,刪除時並不是直接將堆頂元素刪除,而是用陣列的最後乙個元素替換堆頂元素,然後通過向下調整方式重新調整成堆。

5、topk問題

①問題:從大量的資料中找出k個最大(最小)的值。

②思路:將待找的元素序列的前k個元素建立乙個小堆,每次和堆頂元素進行比較。如果陣列當中的當前元素,大於堆頂元素,進行替換,並向下調整。先出堆頂元素,然後進行入堆。

資料結構篇 優先順序佇列(堆)

優先順序佇列,也叫二叉堆 堆 不要和記憶體中的堆區搞混了,不是乙個東西,乙個是記憶體區域,乙個是資料結構 堆的本質上是一種完全二叉樹,分為 均以大根堆為例 堆本質上是一顆完全二叉樹,使用陣列進行儲存,從 a 1 開始儲存,這樣對於下標為 k 的結點 a k 來說,其左孩子的下標為 2 k 右孩子的下...

資料結構 優先順序佇列

設初始序列為 49,38,65,97,76 大根堆 父節點的值大於或等於子節點的值 令數值越大優先順序越高 此時堆頂的元素為所有元素的最大值 97 小根堆 父節點的值小於或等於子節點的值 令數值越小優先順序越高 此時堆頂的元素為所有元素的最小值 38 將佇列中的所有元素按從大到小的數值輸出 分析 因...

資料結構 優先順序佇列

優先佇列的底層實現 二叉堆實現優先順序佇列 練習優先順序佇列也屬於佇列,因此也提供以下介面 利用二叉堆作為優先佇列的底層實現 可以通過comparator或comparable去自定義優先順序高低 利用二叉堆實現優先順序佇列。二叉堆實現優先順序佇列 author yusael public clas...