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 不能少;

猜你喜欢

转载自www.cnblogs.com/astonc/p/10055083.html