最大堆和最小堆(数据结构)
堆和栈的区别:
一、空间分配区别:
- 栈(操作系统):由操作系统自动分配释放,存放函数的参考值,局部变量的值等。其操作方式类似于数据结构中的栈
- 堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表
二、缓存方式区别:
- 栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放
- 堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦称为孤儿对象就能被回收),所以调用这些对象的速度相对低
三、数据结构区别:
- 堆(数据结构):堆可以被看成一棵树,如:堆排序
- 栈(数据结构):一种先进后出的数据结构
堆是一棵完全二叉树
堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其孩子结点的值
堆中每个结点的子树都是堆树
最大堆和最小堆是二叉堆的两种形式
- 最大堆(大根堆):根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子大
- 最小堆(小根堆):根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小
堆树的操作:
以最大堆为例进行讲解,最小堆同理
原始数据为a[ ]={4,1,3,2,16,9,10,14,8,7}
采用顺序存储方式,对应的完全二叉树如图:
(1)构造最大堆
构造堆的基本思想是:首先将每个叶子结点视为一个堆,再将每个叶子结点与其父节点一起构造成一个包含更多结点的对
所以在构造堆时,首先要找到最后一个结点的父节点,从这个结点开始构造最大堆;直到该节点前面所有分支节点都处理完毕,这样最大堆就构造完毕了
假设树的结点个数为n,以1为下标开始编号,直到n结束。对于结点i,其父节点为i/2;左孩子结点为i2,右孩子结点为i2+1。最后一个结点的下标为n,其父节点的下标为n/2
如图,最后一个节点为7,其父节点为16,从16这个节点开始构造最大堆;构造完毕后,转移到下一个父节点,直到所有父节点都构造完毕
最大堆和最小堆(数据结构)相关推荐
- 数据结构与算法--二叉堆(最大堆,最小堆)实现及原理
二叉堆(最大堆,最小堆)实现及原理 二叉堆与二叉查找树一样,堆也有两个性质,即结构性质和堆性质.和AVL树一样,对堆的一次操作必须到堆的所有性质都被满足才能终止,也就是我们每次对堆的操作都必须对堆中的 ...
- 数据结构——最大堆和最小堆(C语言)
定义: 最大堆和最小堆都是一棵完全二叉树. 最大堆:是指根节点的关键字值是堆中的最大关键字值,且每个节点若有儿子节点,其关键字值都不小于其儿子节点的关键字值. 最小堆:是指根节点的关键字值是堆中的最小 ...
- 最大堆和最小堆基本概念(以及栈和堆的区别)
堆和栈的区别: 一.堆栈空间分配区别: 1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈: 2.堆(操作系统): 一般由程序员分配释放, ...
- C++实现最大堆和最小堆
堆 堆数据结构是一种数组对象,它可以被视为一颗完全二叉树结构(或者也有可能是满二叉树) 最大堆: 任一结点的关键码均大于等于它的左右孩子的关键码,其中堆顶的元素最大.(任一路径中的元素升序排列) 最小 ...
- 如何构造最大堆和最小堆?
最大堆和最小堆又叫大顶堆和小顶堆(大根堆和小根堆),是二叉树的一种排列方式. 最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大. 最小堆:根结点的键值是所有堆结点键值中最小 ...
- 最大堆、最小堆Java实现,解决TOP K问题
一.基础知识 1.1 什么是最大(小)堆 最大堆,最小堆类似,以下以最小堆为例进行讲解. 最小堆是满足以下条件的数据结构: 它是一棵完全二叉树 所有父节点的值小于或等于两个子节点的值 1.2 什么是完 ...
- C++判断一个序列是否为堆(最大堆、最小堆)
参考:https://blog.csdn.net/guoweimelon/article/details/50904346 1.如何判断一个序列是不是堆? 把这个序列看成是数组型的二叉树,如果根节点是 ...
- 最大堆和最小堆和平衡二叉树_最小堆二叉树
最大堆和最小堆和平衡二叉树 A Min Heap Binary Tree is a Binary Tree where the root node has the minimum key in the ...
- 2020 C++ priority_queue 最大堆与最小堆介绍
文章目录 1.问题描述 2.具体分析 3.其他方式 4.用最小堆解决问题 1.问题描述 通常在刷题的时候,会遇到最大堆.最小堆的问题,这个时候如果自己去实现一个也是OK的,但是通常时间不太够,那么如何 ...
最新文章
- 判断参数对象是否为DBNULL
- rs232 距离_你知道RS232与RS485接口的区别吗?
- 内排序及时间复杂度分析-插入排序选择排序交换排序归并排序分配和索引排序对比...
- 关于 Unity WebGL 的探索
- RabbitMQ liunx-centos 安装过程记录
- nginx配置文件注释说明
- 数据库事务日志已满的解决办法
- 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises05
- IDEA安装Vue插件
- 正则表达式的基本原理
- 四象限法推导lm曲线_提出研究问题的“四象限法”
- 使用python完成知乎模拟登陆
- MCD12Q1数据处理教程——基于HEG、ArcGIS和ENVI
- 微信小程序做图片压缩
- Leetcode 2127. 参加会议的最多员工数
- win10系统安装打印机失败如何解决?
- 手机怎么解决同ip多账号_问道手游:2019搬砖技巧分享,多开养号才是王道,三天肝出月卡...
- 零基础入门NLP - 天池新闻文本分类Task3笔记
- 入手多普达D900(T版)- 心疼
- kubernetes-dashboard登录出现forbidden 403
热门文章
- .so是什么文件_Linux的so文件到底是干嘛的?浅析Linux的动态链接库
- 关于一个任意文件上传漏洞场景的讨论
- 再见 HTTP?10 分钟手把手教会你将网站切换到 HTTPS,安全有保障,yyds!
- ad16自动布线设置规则_pcb自动布线设置_设置线间距与宽度设置_pcb布局布线技巧...
- dns 解析,一个域名解析到多个ip地址
- 【C语言】字符串的拷贝
- 【MATLAB】矩阵元素及其基本运算
- 笔记本电脑黑屏基础处理
- 最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
- 【JS】Javascript中的this到底是什么