1.優先順序佇列:是一種用來維護一組元素構成的集合s的資料結構,這一組元素中的每乙個都有乙個關鍵字key
對優先佇列執行的操作有1) 查詢;2) 插入乙個新元素;3) 刪除. 4)返回最大或最小值
insert
(s,x):把元素x插入到集合s。
maxmum
(s):返回s中的具有最大關鍵字的元素
extractmaxmum
(s):刪除並返回s中的具有最大關鍵字的元素
increasekey
(s,i,key):將第i個元素的關鍵字的值增加到k,這裡k值不能小於i原來關鍵字的值。
最大優先順序佇列不管各元素的入隊順序,在出隊時,總是對應優先順序最大的元素出隊。
最大優先順序佇列一般用二叉樹來實現。因為考慮到,對於最大優先順序佇列來講,我們關心的只是最大值,因此,這時的二叉樹只需要具備下面這個性質,那麼就可以實現了:
性質a:總是讓二叉樹中的每乙個節點的key(也就是優先順序)值比該節點的子節點的key值大。
#include using namespace std;
const int inf = 999999; /
// 以下**在堆排序中已講解過 ///
void maxheapify(int *a, int i, int len)}
void buildmaxheap(int *a, int size)
void printarray(int data, int size)}
// 插入關鍵字為key的元素
void maxheapinsert(int *a, int key, int &heapsize)
int main()
; // 區別len 和 heapsize
// heapsize是堆的大小,而len是初始陣列的總大小。
len = heapsize = 12;
// 首先建堆
buildmaxheap(arr, len);
cout << "建堆後: " << endl;
printarray(arr, len);
// 使用heapmaximum
cout << "當前最大的元素是: " << endl;
cout << heapmaximum(arr) << endl << endl;
// 使用heapextractmax
cout << "使用heapextractmax後: " << endl;
heapextractmax(arr,heapsize);
printarray(arr, heapsize);
// 再次使用heapextractmax
cout << "再次使用heapextractmax後: " << endl;
heapextractmax(arr,heapsize);
printarray(arr, heapsize);
// 使用heapincreasekey
cout << "使用heapincreasekey後: " << endl;
heapincreasekey(arr, 2, 15);
printarray(arr, heapsize);
// 使用maxheapinsert
cout << "使用maxheapinsert後: " << endl;
maxheapinsert(arr, 28, heapsize);
printarray(arr, heapsize);
}
演算法導論 第三章 函式的增長
漸近記號 1 漸近上界記號o 大寫o 含義 漸近地給出了乙個函式在常量因子內的上界 2 漸進下界記號 大寫 含義 漸進的給出乙個函式在常量因子的下界 漸進緊確界記號 含義 漸進的給出了乙個函式的上界和下界,eg 形式證明 n n 2 3 n n n 非漸進緊確上界記號o 小寫0 如果f n o g ...
演算法導論第三章函式的增長問題研究
演算法導論3.2 5 lg lg n 與lg lgn 哪個漸近更大些?先看lg n怎麼定義的。lg n min 假設乙個比宇宙原子總數目10 80還要大的數2 65536.根據多重對數函式定義知道 當i 1時,第一次lg得 lg2 65536 65536 書中規定log2 lg 當i 2時,第二次l...
演算法導論 第三章 掌握漸進符號O和
本篇文章基於麻省理工學院的公開課第二講。首先從純數學的角度上來理解。exam1 f n o g n 代表存在常數c和n0,使得n n0時,滿足0 f n c g n 比如2 n 2 o n 3 這裡n 2代表n的平方,n 3代表n的三次方,用過matlab的應該很好理解。這裡套用o的定義可知,即存在...