STL中的堆容器:
优先队列(priority_queue).译为优先队列,使用priority_queue要添加头文件—queue
定义方法为:priorty_queue<typename> name;
其中,typename可以是任意基本类型或者容器,name为优先队列的名字。
和queue不一样的是,priorty_queue没有front()和back(),而只能通过top()或pop()
访问队首元素(也称堆顶元素),也就是优先级最高的元素。
代码演示(优先队列):
#include<iostream>
#include<queue>
using namespace std;
int main(){
//vector作为容器用来存放int类型的元素
//less<int>表示int变量中,数字越大的优先级越大,排在前面
//greater<int> 表示 int 变量中,数字越小的优先级越大
priority_queue<int,vector<int>, less<int> > q;//声明一个int类型的优先级队列
//当队列或者优先队列中没有元素时,取出头元素会报错
q.push();
for(int i=1;i<=10;i++){
q.push(i);
}
cout<<q.top()<<endl;
return 0;
}
贪心算法:
贪心的本质:
一个贪心算法总是总是做出当前最好的选择,也就是说,它期望通过局部最优选择从而得到全局优的解决方案。 ——《算法导论》
贪心算法的特点:
1.贪心算法在解决问题只根据当前已有的信息就做出选择,而且一旦做出了选择,这个选择都不会改变。
2.换言之,贪心算法并不是从整体最有考虑,它所做出的选择只是在某种意义上的局部最优解。
3.贪心算法能得到许多问题的整体最优解或整体最优解的近似解。
4.选择什么样的贪心算法策略,直接决定算法的好坏。