2.5.2 優先佇列
阿新 • • 發佈:2018-12-02
1.時間複雜度:最小堆
n個結點的完全二叉樹(堆是完全二叉樹)的深度為h(根的深度為1),則h和n之間滿足 2^(h-2) <n <= 2^h,h近似等於log(n)+1。
從程式碼的直觀來看,每次調整一個結點需要log(n),一共調整(n-1)/2個結點,故時間複雜度為O(nlogn),但要注意在中間過程中第s層的結點往下調整時實際只需最多調整(h-s)次,第s層一共調整2^(s-1)*(h-s),這樣時間複雜度可寫成:
所以優先佇列的構建時間為線性的。
2.功能:自動排序(預設從大到小)
3.標頭檔案:
#include<queue>
4.宣告:
priority_queue<型別> q;
5.操作:(注意和queue比 沒有front和end操作)
q.size();//返回q裡元素個數 q.empty();//返回q是否為空,空則返回1,否則返回0 q.push(k);//在q的末尾插入k q.pop();//刪掉q的第一個元素 q.top();//返回q的第一個元素
6.對結構體的使用方法:(操作符過載)
struct Time{ int start; bool operator < (const Time& t)const{ returnstart > t.start; } };
注意引數列表中的 const 不能少;