数据结构 小顶堆建堆过程 构建过程
【一】简介
- 最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。
- 最小堆示例:
【二】最小堆的操作
最小堆的构建:
初始数组为:9,3,7,6,5,1,10,2
按照完全二叉树,将数字依次填入。
填入完成后,从最后一个非叶子结点(本示例为数字6的节点)开始调整。
根据性质,小的数字往上移动;至此,第1次调整完成。
注意,被调整的节点,还有子节点的情况,需要递归进行调整。
第二次调整,是数字6的节点数组下标小1的节点(比数字6的下标小1的节点是数字7的节点),
以下是本示例的图解:
注意:数字9的节点 将和 数字1的节点 发生对调,对调后,需要递归进行调整,请一定注意。
- 最小堆的元素插入 【插入到该二叉树的最后一个节点,再调整】
以上个最小堆为例,插入数字0。
数字0的节点首先加入到该二叉树最后的一个节点,依据最小堆的定义,自底向上,递归调整。
以下是插入操作的图解:
- 最小堆的节点删除【是把根节点删除,最后一个叶子节点放到根节点上,再调整】
对于最小堆和最大堆而言,删除是针对于根节点而言。
对于删除操作,将二叉树的最后一个节点替换到根节点,然后自顶向下,递归调整。
以下是图解:
【三】有一类常见的面试问题:
如何从一个存有10亿个数字的文档中获取到最大的10个数,计算机内存只有1M?
考虑10亿个数据很多,一次性无法装到我们的计算内存中,
采用常用的排序算法,可能也是不好进行操作,数据量很大,
这个地方可以想到可以才用小顶堆来解决这个问题。
1、让计算机去io读取文件
2、把读取出来的数据去构建一个包含10个元素的小顶堆
3、构建完成后,每次从文件中读取出来的一个数字和堆顶的元素进行比较,
如果比堆顶元素小,就直接丢弃或者跳过。如果读取出来的数据比堆顶元素大,
那么就可以用这个元素替代堆顶元素,进行调整小顶堆。这个算法的时间复杂度是O((100亿-1000)log(1000)),即O((N-M)logM),空间复杂度是M
转自:https://blog.csdn.net/wenge1477/article/details/101797674
数据结构 小顶堆建堆过程 构建过程相关推荐
- 用Java实现二叉堆、大顶堆和小顶堆
先了解了解 什么是二叉堆 二叉堆就是完全二叉树,或者是靠近完全二叉树结构的二叉树.在二叉树建树时采取前序建树就是建立的完全二叉树.也就是二叉堆.所以二叉堆的建堆过程理论上讲和前序建树一样. 什么是大顶 ...
- 数据结构:堆的实现与建堆时间复杂度分析
目录 前言 一.堆的介绍 1.堆的本质 2.堆的分类 二.堆的实现(以小根堆为例) 1.关于二叉树的两组重要结论: 2.堆的物理存储结构框架(动态数组的简单构建) 3. 堆元素插入接口(以小根堆为例) ...
- C++大顶堆和小顶堆
C++大顶堆和小顶堆 原理 大顶堆 小顶堆 大顶堆和小顶堆对比图 大顶堆和小顶堆的实现代码 vector和push_heap.pop_heap实现堆 建堆 调整堆 priority_queue实现堆 ...
- vue 源码学习(一) 目录结构和构建过程简介
Flow vue框架使用了Flow作为类型检查,来保证项目的可读性和维护性.vue.js的主目录下有Flow的配置.flowconfig文件,还有flow目录,指定了各种自定义类型. 在学习源码前可以 ...
- vue 源码学习(一) 目录结构和构建过程简介 1
Flow vue框架使用了Flow作为类型检查,来保证项目的可读性和维护性.vue.js的主目录下有Flow的配置.flowconfig文件,还有flow目录,指定了各种自定义类型. 在学习源码前可以 ...
- 小顶堆数据结构C/C++代码实现
相比队列和栈,很多人可能对堆的概念比较陌生,下面个给出堆的本质概念 一.堆也是一种数据结构,从实际应用意义来说,他是一种最优级别数据永远在第一位的队列,本文皆以最小值为例(小顶堆),即它变相是一种会永 ...
- [数据结构]Python Heapq库--小顶堆
一.heapq库简介 heapq 库是Python标准库之一,提供了构建小顶堆的方法和一些对小顶堆的基本操作方法(如入堆,出堆等),可以用于实现堆排序算法. 堆是一种基本的数据结构,堆的结构是一棵完全 ...
- python树结构实现小顶堆_数据结构和算法入门之小顶堆和大顶堆Python实现
首先简单提一下小顶堆和大顶堆,其本质是一颗完全二叉树,不同点在于:除叶子节点外,小顶堆的每个父节点的key都要比其左右两个子节点的key小:大顶堆的每个父节点的key都要比其左右两个子节点的key大. ...
- 数据结构之堆——C++实现大顶堆和小顶堆
大小顶堆的实现 什么是大顶堆和小顶堆 大小顶堆的底层实现 代码实现小顶堆 定义小顶堆类 构造函数 插入 扩大堆数组容量 删除 析构函数 代码实现大顶堆 测试 什么是大顶堆和小顶堆 堆是一种完全二叉树. ...
最新文章
- (一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)
- Windows Mobile 5.0 设备的目录变化
- 可微分的「OpenCV」:这是基于PyTorch的可微计算机视觉库
- 张晓帆:一个决定将47万奖金全部投入科研的博士生
- 解析solidity的event log
- 网易新闻 时事新闻抓取链接
- Jquery 插件集合
- flowable 中的互斥网关、并行网关、兼容网关、事件网关
- html隔一行的代码,HTML n种方式实现隔行变色的示例代码
- nexus下载地址分享
- 微信公众平台接口调试工具json格式不对怎么搞_关于测试一个接口的面试题
- A very hard mathematic problem(二分)
- wamp php不可用_PHPWAMP开启php
- G729调用方法及使用wavlib播放出现颤音的解决方法
- 一周学好python_学好 Python 的 11 个优秀资源
- P5692 手牵手走向明天
- python数据库开发 dga_使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...
- 一篇文章带你快速了解荧光蛋白
- 锐捷睿易:扩大DHCP掩码导致AP不上线问题
- java环境安装(java环境安装教程)
热门文章
- 搭建docker私有仓库 配置用户名密码
- python当中的metaclass使用
- 新货 升级版 BlackBerry手机条码扫描器 MS50,和BlackBerry 9900等手机可以完美结合
- linux更改设备树,petalinux 修改设备树
- debian安装ssh服务
- Compare T-Shirt Sizes
- Acunetix 简介 为什么需要保护您的 Web 应用程序
- 理解Project2007中的视图
- Sql declare申明变量
- 心理应激微反应刑事侦查应用,社交行为、情绪行为、生物行为,说谎掩饰,单向表达不分析,情绪反应管理机制,惊讶,厌恶,愤怒,恐惧,悲伤,愉悦