优先队列那些事儿
2015-09-13 01:01
295 查看
如果要用最简单的话说明:什么是优先队列?
博主在《数据结构与算法分析》上找到了这样一句话:
优先队列是至少允许下列两种操作的数据结构:Insert,DeleteMin
实现方式?
我们在我们先前看过的数据结构中选择一样:
先看看他们的复杂度
数据结构 | Insert | DeleteMin |
---|---|---|
无序链表 | O(1) | O(n)(遍历n寻找最小元素) |
有序链表 | O(n)(寻找插入位置) | O(1) |
二叉查找数 | O(logn) | O(logn) |
二叉堆
堆是这样一种数据结构:就是所有父结点都比子结点要小。
例如这样
13 / \ 21 16 / \ / \ 24 31 19 68 / \ / 65 26 32
那么,它的两种操作的算法应该是
void Insert(int x,priority_queue q){ for(i=q.size()+1;x<q.elements[i/2];i/=2){ q.eletments[i]=q.eletemnet[i/2]; } q.elements[i]=x; }
解释一下
int DeleteMin(priority_queue q){ if(isEmpty()) error(); int min=q.elements[1];//得到了最小值 int lastone=q.elements[q.size()--]; int child;//接下来一个要被上率的位置 for(int i=1;i*2<=q.size();i=child){ child=i*2; if(child!=q.size()&&q.elements[child+1]>q.elements[i]) child++; if(lastone>q.elements[child]) q.elements[i]=q.elements[child]; else break; } q.elements[i]=lastone; return min; }
相关文章推荐
- C语言之变量与常量
- C语言之左移和右移运算符
- C语言之外部变量与作用域
- POJ - 1988 Cube Stacking(带权并查集)
- 阿尼玛
- 《华油能源OA系统数据同步和扩展的设计与实现_张宇峰》阅读笔记
- C语言之函数值传递的好处
- c#泛型冒泡排序法
- [Android] AudioTrack::start
- 第一阶段总结
- C语言之argument和parameter的区别
- C语言之char类型研究
- 牛客——分遗产
- 在系统编程ISP与在应用编程IAP
- org.junit.runner.RunWith的bug
- ZOJ 3820 Building Fire Stations(二分+BFS)
- 0913-关于百度注册的案例
- lua5.2模块注册
- opencv2.0 随机数产生器用法
- PHP中两个整形的赋值所占用空间大小不一样,求解