heaps 和 priority queue堆和优先队列的定义和数据结构表示
- heaps
堆:并非一对杂乱无章的结构, 堆是一种存在特殊关系的树。
是一种半排序的树, 所有的父节点大于子节点(max heaps) 或 所有的父节点小于子节点(min heaps)。上图为max heaps. 满足二叉树结构的推叫做, binary heaps. - 特点
这种结构有别于BST, 它是一种层与层有特殊关系的数, 如果是max heaps更贴近于家谱图。如上图, 9必须大于所有子孙节点, 因为所有子孙节点是9的后代, 但其子孙却没有固定的关系, 比如, 6 必须满足小于7, 因为是7的孩子, 但不一定必须小于2或者5, 因为不是直系关系。
有了这种特殊的结构, 使得堆有许多好的算法, 比如堆排序, 优先队列这样最常用的高级算法。 - binary heaps 区别于 BST
上图均为堆, 但都不是BST - 插入操作
4.1 按照中序二叉树的顺序插入
4.2 交换元素直到插入元素满足二叉堆结构。
最终为
可见最多用log(n)的操作便完成了堆的插入。 - 删除操作
5.1 删除堆的最大元素, 即为堆顶元素
5.2 用堆的最下层,最右边元素交换。
5.3 堆顶元素和其大的孩子交换, 这样才能满足堆结构
这样同样最多用log(n)的操作便完成了堆顶元素的删除。
- 数据结构表示
6.1 堆的这种结构可以很好的用数组表示, 如果已知第一个和最后一个元素以及堆的大小, 完全可以通过数学, 计算出所有元素的位置下表。为了方便计算第一个元素小标为1.
6.2 这样可以完成堆的插入和删除操作。
- 优先队列
把堆放在数组中, 便是优先队列的应用, 这样可以完成元素的插入, 但在删除元素时, 总是删除最小或最大的元。同时这样可以完成堆排序。
heaps 和 priority queue堆和优先队列的定义和数据结构表示相关推荐
- C语言实现升序优先队列Ascending priority queue(附完整源码)
实现升序优先队列Ascending priority queue node结构体 升序优先队列Ascending priority queue完整源码(定义,实现,main函数测试) node结构体 ...
- 数据结构及算法基础--优先队列(Priority Queue)
这真的是一个包含很多东西的数据结构.我们会逐步解析,来讲解优先队列: 首先知道什么是优先队列: 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除(first in, last ou ...
- C语言优先队列作用,C语言实现优先队列(priority queue)
堆排序是一个比较优秀的算法,堆这种数据结构在现实生活中有很多的应用,比如堆可以作为一个优先队列来使用,作为一个高效的优先队列,它与堆的结构一样,都有最大优先队列,最小优先队列.优先队列priority ...
- 高级数据结构(Ⅱ)优先队列(Priority Queue)
高级数据结构(Ⅱ)优先队列(Priority Queue) 许多应用程序都需要处理有序的元素,但不一定要求它们全部有序,或是不一定要一次就将它们排序.很多情况下我们会收集一些元素,处理当前键值最大的元 ...
- 优先队列(priority queue)
目录 一,优先队列 二,STL优先队列 三,二叉堆实现优先队列 四,二项堆实现优先队列 五,线段树实现优先队列 六,OJ实战 力扣 295. 数据流的中位数 一,优先队列 优先队列可以插入元素.查询最 ...
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- 【数据结构】堆,大根堆,小根堆,优先队列 详解
目录 堆 1.堆的数组实现 2.小根堆 3.大根堆 4.优先队列 例题 1.SP348 EXPEDI - Expedition(有趣的贪心思路,优先队列) 2.合并果子 堆 要了解堆之前,请先了解树, ...
- 数据结构-堆实现优先队列(java)
队列的特点是先进先出.通常都把队列比喻成排队买东西,大家都很守秩序,先排队的人就先买东西.但是优先队列有所不同,它不遵循先进先出的规则,而是根据队列中元素的优先权,优先权最大的先被取出.这就很像堆的特 ...
- 【STL学习】优先级队列Priority Queue详解与C++编程实现
优先级队列Priority Queue介绍 优先级队列是一个拥有权值观念的queue.它允许在底端添加元素.在顶端去除元素.删除元素. 优先级队列内部的元素并不是按照添加的顺序排列,而是自动依照元素的 ...
最新文章
- 【数据库】Ubuntu12.04安装配置Redis3.0
- python 调用linux命令-python3调用linux命令——Subprocess
- 3、Docker容器操作
- 非线性常微分方程组 matlab,matlab常微分方程和常微分方程组求解.doc
- Anaconda中如何查看已经安装的包
- bzoj 1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分)
- c# checkbox 外观_2020款日产蓝鸟上市!外观比大众朗逸漂亮,油耗6L 国六,9.59万_搜狐汽车...
- mysql自动去重_关于mysql自联去重的一些记录
- 用maven编译spark2.1.0
- 【HDU 5965】扫雷【线性递推】
- 三星内存编码_看编号 识内存
- 免费的国内代理服务器、国内代理IP地址
- antd去掉table自带的分页条
- keras深度学习(3)-单标签多分类问题之新闻分类
- 发送RST报文的几种可能的情况
- 【Java小游戏】两小时制作大鱼吃小鱼小游戏项目
- 使用GnuRadio + OpenLTE + SDR 搭建4G LTE 基站(上)
- APP案例分析——嘀嗒番茄钟
- kafka中副本数据同步策略 ,acknowledge的发送策略,kafka的数据可靠性保证
- 50岁的程序员还奋战一线,软件测试能干到多少岁?有年龄限制吗?
热门文章
- Word中更新图表所有的域
- 深入浅出Java Object Layout (JOL)
- 如何查看mysql库中表的创建语句
- 单模光电转换器怎么接_光纤收发器怎么连接?光纤收发器安装图解大全!
- 客户端与服务器的数据传输
- 【MySQL】 # 优化你的SQL语句
- java中如何将字符串数组转换成字符串(转)
- OCR文本识别,文本行检测技术。
- codeforce 332B Maximum Absurdity
- C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是