堆实现最优队列
来源:互联网 发布:淘宝网长袖女t恤 编辑:程序博客网 时间:2024/06/03 16:44
最优队列就是靠堆实现的,普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-out)的行为特征。也就最优队列可以保证队头一定是有限度最大的元素。一个优先队列一般满足以下几个操作:
INSERT(S,x):把元素x插入集合S中
MAXIMUM(S):返回S中具有最大关键字的元素
EXTRACT-MAX(S):去掉并返回S中具有最大关键字的元素
INCREASE-KEY(S,x,k):将元素x的关键字增加到k,这里假设k的值不小于x的关键字值
#include<iostream>#include<algorithm>#define maxsize 5000using namespace std;int heapsize;int HeapMaximum(int a[])//返回优先队列中关键字最大的元素{return a[1];}void MaxHeapify(int a[], int i)//维护最大堆{int left = 2 * i;int right = 2 * i + 1;int largest;if (left<=heapsize&&a[i] < a[left])largest = left;elselargest = i;if (right<=heapsize&&a[largest] < a[right])largest = right;if (largest != i){swap(a[i], a[largest]);MaxHeapify(a,largest);}}int HeapExtractMax(int a[])//去掉并返回关键字最大的元素{if (heapsize < 1)cout << "error:heap underflow" << endl;int max = a[1];a[1] = a[heapsize];heapsize--;MaxHeapify(a, 1);return max;}void HeapIncreaseKey(int a[], int i, int key)//将元素x的关键字增加为key,这里假设key的值不小于原值{if (key < a[i])cout << "error:new key is smaller than current key" << endl;a[i] = key;while (i > 1 && a[i / 2] < a[i]){swap(a[i], a[i / 2]);i = i / 2;}}void MaxHeapInsert(int a[], int key)//往优先队列中插入一个关键字为key的元素{heapsize++;a[heapsize] = -0xfffffff;//先增加一个关键字为负无穷的叶节点HeapIncreaseKey(a, heapsize, key);}int main(){int n;int key[maxsize],heap[maxsize];cin >> n;heapsize = 0;for (int i = 1; i <= n; i++){cin >> key[i];MaxHeapInsert(heap, key[i]);}cout << "max is : " << HeapMaximum(heap) << endl;cout << "heapsize is : " << heapsize << endl;cout << "drop an item and then the max is : " << HeapExtractMax(heap) << endl;cout << "heapsize is : " << heapsize << endl;for (int i = 1; i <= heapsize; i++)cout << heap[i] << " ";cout << endl;cout << "change the third item's key" << endl;HeapIncreaseKey(heap, 3, 100);for (int i = 1; i <= heapsize; i++)cout << heap[i] << " ";cout << endl;cout << "max is : " << HeapMaximum(heap) << endl;return 0;}
0 0
- 堆实现最优队列
- 堆、队列、java实现
- 优先队列实现堆
- 循环队列堆实现
- 优先队列(堆实现)
- 利用堆实现堆排序&优先队列
- 利用堆实现堆排序&优先队列
- 优先队列(二叉堆实现) + 堆排序
- 堆的实现、堆排序、优先队列
- 用堆实现优先队列
- 堆-实现优先级队列算法
- 用堆实现优先队列
- 最小优先队列--堆实现
- 堆排序,优先队列实现
- 用堆实现优先队列
- 堆实现的优先级队列
- 优先级队列之堆实现
- 用堆实现优先级队列
- python核心编程学习笔记-2016-07-18-02-enumerate()函数
- git push 避免重复输入用户名和密码
- HTTP 204和205的应用
- tomcat安全加固指南--SSL通信原理及Tomcat SSL双向验证配置
- mysql记录 第二天
- 堆实现最优队列
- 如何设计并实现你的App创意?
- Game Loop - Game Programming Patterns
- [编程规范]一、多使用常量
- 浅谈子网掩码(一) 之 IP 总结篇
- Effective Java(一) 创建和销毁对象
- 佛家的经典
- 国内一线互联网公司内部面试题库
- 相对布局 竖直居中