算法库中heap应用
STL中make_heap 的接口为:
default (1) |
|
---|---|
custom (2) |
|
默认的使用operator< 进行比较。而我们可以自定义comp进行比较,来进行建堆。
其中,两个make_heap所使用的参数,[first,last) 这个区间是半开半闭的。
当我们需要对堆进行存取操作时,我们有函数,pos_heap,push_heap
default (1) |
|
---|---|
custom (2) |
|
使用pop_heap 操作后, 最大值被移动到last-1的位置。[first ,last-1) 之间的元素继续保持堆的形态。
我们只需取出最后一个元素即可。也就是vec.pop_back();
default (1) |
|
---|---|
custom (2) |
|
执行push_heap 时, [first,last-1)个元素是保持堆形态的,如果不是堆,则会报错。
这个函数是相当于对堆进行调整。
Code:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
vector heap;
int n;
int main()
{
cout<<"Insert numbers of heap:";
cin>>n;
cout<<"Insert values of each members:\n";
for(int i=0;i<n;i++)
{
int read;
cin>>read;
heap.push_back(read);
}
make_heap(heap.begin(),heap.end());//大根堆
//make_heap(heap.begin(),heap.end(),greater());小根堆
cout<<"If there's something trouble,insert \"help\"!\n";
cout<<"Heap has neen maken!\nPlease insert commands:\n";
while(1)
{
string s;
cin>>s;
if(s=="pop")
{
pop_heap(heap.begin(),heap.end());
cout<<heap[heap.size()-1];
heap.pop_back();
cout<<endl;
}
else if(s=="push")
{
int read;
cin>>read;
heap.push_back(read);
push_heap(heap.begin(),heap.end());
}
else if(s=="top")
{
cout<<heap.front()<<endl;
}
else if(s=="sort")//奇怪的是,这里大根堆的堆排序是由小到大的(就是把数列逆转了)
{
vector temp;
temp=heap;
sort_heap(temp.begin(),temp.end());
for(int i=0;i<temp.size();i++)
cout<<temp[i]<<' ';
cout<<endl;
}
else if(s=="out")
{
for(int i=0;i<heap.size();i++)
cout<<heap[i]<<' ';
cout<<endl;
}
else if(s=="end")
{
return 0;
}
else if(s=="help")
{
cout<<"1.Pop the top number of heap,please insert \"pop\"!\n";
cout<<"2.Push a number into heap,please insert \"push numbers\"!\n";
cout<<"3.Look the top number of heap,please insert \"top\"!\n";
cout<<"4.Sort the heap and import result,please insert \"sort\"!\n";
cout<<"5.Look the array of heap,please insert \"out\"!\n";
cout<<"6.End the program,please insert \"end\"!\n";
}
else
cout<<"Bad Commands!"<<endl;
}
return 0;
}
算法库中heap应用的更多相关文章
- C++神奇算法库——#include<algorithm>
算法(Algorithm)为一个计算的具体步骤,常用于计算.数据处理和自动推理.C++ 算法库(Algorithms library)为 C++ 程序提供了大量可以用来对容器及其它序列进行算法操作的函 ...
- mahout算法库(四)
mahout算法库 分为三大块 1.聚类算法 2.协同过滤算法(一般用于推荐) 协同过滤算法也可以称为推荐算法!!! 3.分类算法 算法类 算法名 中文名 分类算法 Log ...
- STL笔记(6)标准库:标准库中的排序算法
STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...
- 8、泛型程序设计与c++标准模板库4.标准c++库中的算法
标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...
- scikitlearn库中调用k-近邻算法的操作步骤
1.k近邻算法可以说是唯一一个没有训练过程的机器学习算法,它含有训练基础数据集,但是是一种没有模型的算法,为了将其和其他算法进行统一,我们把它的训练数据集当做它的模型本身.2.在scikitlearn ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- scikit-learn 支持向量机算法库使用小结
之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...
- scikit-learn 线性回归算法库小结
scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...
- 算法库:Matlab与C++混合编程
算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...
随机推荐
- 【IOS 开发】Object-C 运算符
博客地址 : http://blog.csdn.net/shulianghan/article/details/41624613 1. 算术运算符 算术运算符 : 加(+), 减(-), 乘(*), ...
- html倒计时代码
<SPAN id=span_dt_dt></SPAN> <SCRIPT language=javascript> <!-- //document.write( ...
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...
- 【一天一道LeetCode】#99. Recover Binary Search Tree
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Two ele ...
- Libgdx 1.6.1发布,跨平台游戏开发框架
Libgdx 1.6.1发布 [1.6.1] 英文原文:http://www.badlogicgames.com/wordpress/?p=3694 译文翻译:宋志辉 - Net.newServerS ...
- 【翻译】从Store生成Checkbox Group
原文:Ext JS: Generating a Checkbox Group from a Store Ext JS的checkbox group可以用来将复选框组合成一个单一的逻辑字段.由于复选框时 ...
- spring mvc接收List集合、JUI传JSP List
JUI页面是这样的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <div class=&quo ...
- 9.6、Libgdx之罗盘
(官网:www.libgdx.cn) 有些Android和iOS设备可能需要检测使用罗盘检测方向. 注意:罗盘当前在iOS设备中不可用,RoboVM暂不支持. 查询当前罗盘当前是否可用: boolea ...
- Java图形界面编程生成exe文件
1. 先将代码打成jar,然后使用exe4j转成exe ext4j下载 链接:http://pan.baidu.com/s/1kTCIZtX 密码:pvj1 打开EXE4J Advanced Opti ...
- Caffe + Ubuntu 15.04 + CUDA 7.0 安装以及配置
作为小码农的我,昨天就在装这个东东了,主要参考第一篇博文,但是过程发现很多问题,经过反反复复,千锤百炼,终于柳暗花明,我把这个caffe给搞定了,是故,我发布出来,后之来者,欲将有感于斯文~ 本分分为 ...