演算法設計課程複習 2 優先佇列

2021-10-01 14:29:23 字數 2212 閱讀 8319

優先佇列的出隊順序是按照優先順序來的,可以找到最小或者最大元素,同時支援插入或者刪除最小最大元素。

優先佇列的格式:

priority_queue

t:佇列中元素的資料型別

container: 用於儲存和訪問佇列元素的底層容器的型別。

compare: 比較關係,預設是數值上的小於關係(return a優先佇列支援的操作如下:

(1)priority_queue::empty()

判斷佇列是否為空(也即是size是否為0),是則返回true,否則返回false。

(2)priority_queue::size()

返回佇列中元素的個數。這個函式也可以用於判斷佇列是否為空。

(3)priority_queue::top()

返回隊頭元素的常引用,隊頭元素是在所設定的比較關係下最大也即優先順序最高的元素。此函式實際上呼叫底層容器的front函式。

(4)priority_queue::pop()

清除隊頭元素。

(5)priority_queue::push(data)

給佇列插入元素,新元素會按其優先順序被排列到適當位置。

struct cmp};

priority_queue

,cmp> q;

優先佇列相關題目

求中位數

dynamic median

ac**:

#include

#include

#include

#include

using

namespace std;

priority_queue<

int, vector<

int>

, less<

int>> que1;

//最大堆

priority_queue<

int, vector<

int>

, greater<

int>> que2;

//最小堆

void

insert

(int num)

else

if(que1.

size()

-2== que2.

size()

)if(que1.

size()

+1== que2.

size()

)}void

query()

void

del()}

void

clear()

intmain

(int argc,

const

char

* ar**)

if(c ==

'd')

del();

if(c ==

'q')

query()

;}}return0;

}

合併k個鍊錶

題目描述:

合併k個排序鍊錶,返回合併後的排序鍊錶

示例:輸入:

1->4->5,

1->3->4,

2->6

輸出:1->1->2->3->4->4->5->6

思路:利用最小堆,首先把k個鍊錶的首元素都加入到最小堆中,它們會自動排好序,然後每次取出最小的元素加入到最終結果的鍊錶中,之後把取出元素的下乙個元素加入到堆中,直到堆中沒有元素。

struct listnode 

;listnode*

merge

(vector> lists)

listnode *head =

null

,*temp =

null

,*pre =

null

;while

(!que.

empty()

)return head;

}

找出第k大的元素

例如:12345,第2大的元素是4

思路:構建乙個size為k的最小堆,每次進入堆的時候和棧頂的元素進行比較,

int

find

(int n,

int k)

else}}

return que.

top();

}

更多題目詳見優先佇列與堆

資料結構與演算法 複習 堆 優先佇列

插入演算法 該演算法從優先佇列的序列去觀察,比較直觀。首先把要插入的元素放在隊尾temp裡。從佇列的最後乙個元素,逐次向前尋找父節點,空位隨之移動,當到達隊頭,或者當前元素小於temp元素時,即可插入。刪除演算法 刪除最小元素,也就是最頭的元素。當我們利用 當前元素數量 1 這樣的操作刪除元素後,最...

演算法課程期末複習總結

八大排序演算法複雜度比較 求解遞迴式的複雜度 max sum 最大子段和 int len arr.length int dp newint len 1 dp 0 0 for int i 1 i len i int res integer.min value for int i 1 i dp.leng...

演算法之優先佇列

1 概念 優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列 最大堆 和最小優先順序佇列 最小堆 優先順序佇列是一種維護有一組元素構成...