1. 程式人生 > >2.5.2 優先佇列

2.5.2 優先佇列

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{  
        return
start > t.start; } };

注意引數列表中的 const 不能少;