文章目录

  • 引言:Top K问题
  • 二叉堆
    • 二叉堆的实现原理
    • 二叉堆的添加原理
    • 二叉堆的删除
    • 批量建堆(自上而下的上滤与自下而上的下滤)及其效率对比

引言:Top K问题




二叉堆

二叉堆的实现原理

  1. 二叉堆(以最大堆为例)的原理:是一棵每个结点都大于其子结点的完全二叉树0
  2. 二叉堆的实现:二叉堆是通过动态数组的形式实现的,其中动态数组存储结点的顺序和层序遍历相同。

二叉堆的添加原理

  1. 首先你要知道二叉堆通过动态数组实现,且排列顺序与层序遍历顺序相同
  2. 其次,二叉堆是一个每个结点都大于其左右子结点的树
  3. 那么,我们如何保证二叉堆每添加一个新元素,而二叉堆还能保持这个性质呢?而且在动态数组中我们添加时应该如何处理新元素的位置呢?如下图向一颗二叉堆中添加80

  1. 树中具体原理: 添加新元素时,新元素初始位置在完全二叉树的尾部(就是层序遍历的最后一个结点后),然后与父结点比较大小,如果大于父结点,就和父结点交换位置,如此反复,直到小于父结点或者没有父结点了。
  2. 动态数组中的具体原理:联想树中原理,转化为动态数组就需要定位父结点在动态数组中的位置,也就是下面这些性质,如果根结点是0,新结点是i,则父结点就是i-1/2 向下取余,根结点是1,新结点是i,则父结点就是i/2 向下取余。知道了父结点的位置,剩下的和树中操作相同
    8.

二叉堆的删除

二叉堆的删除和添加类似,但是最大堆只在堆顶(根)处进行删除

  1. 首先把数组末尾的元素替换掉数组的第一个元素,即覆盖根结点
  2. 新的小根结点与其两个子结点进行比较,与其中较大的那一个交换位置
  3. 不断重复比较和交换的过程,直到没有子结点或者大于所有子结点为止


批量建堆(自上而下的上滤与自下而上的下滤)及其效率对比



相当于一个一个添加 (自上而下的上滤)

不完全等同于一个一个删除,但是过程类似

2021-10-21 二叉堆 恋上数据结构笔记相关推荐

  1. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

    复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...

  2. 堆排序 C++代码实现及思想 排序过程输出 恋上数据结构笔记

    复习梗概 文章目录 复习梗概 什么是堆思想? 堆排序算法怎么来的? 什么是下滤?代码 什么是建堆?代码 堆排序本体 代码及排序过程输出 和时间复杂度 完整代码 什么是堆思想? 最大堆:树形结构,每一个 ...

  3. 计数排序及其改进 C++代码实现与分析 恋上数据结构笔记

    文章目录 复习梗概 算法思想 基础思想 改进空间复杂度,改进不能对负数进行排序问题 改进稳定性 计数排序时间空间复杂度 计数排序基础版 代码及输出 计数排序第一次改进版 代码及输出 计数排序终极版 代 ...

  4. 插入排序算法 及其二分搜索优化版 C++代码实现 恋上数据结构笔记

    复习梗概 文章目录 复习梗概 插入排序算法思想 插入排序时间复杂度与特性(多少,与什么有关?) 插入排序基础版 插入排序2nd优化版(优化了哪里?) !!!插入排序二分搜索优化版(优化了哪里?如何优化 ...

  5. 2021-10-15 红黑树 概念和平衡操作理解以及与AVL对比分析 恋上数据结构笔记

    文章目录 红黑树的由来 红黑树需要遵守的五大规则 红黑树与4阶B树的相互转换!! 红黑树的插入(12种情况) 红黑树的删除(3大类情况) 红黑树的平衡 以及与AVL树的性能比较 红黑树的由来 红黑树: ...

  6. 2021-10-11 ! AVL树 及其平衡调整 四种情况 恋上数据结构笔记 (考过)

    b站有个up讲的很详细 https://www.bilibili.com/video/BV1xE411h7dd?from=search&seid=11383601726930144190&am ...

  7. 基数排序及其思想 C++代码实现及分析 恋上数据结构笔记

    文章目录 复习梗概 算法思想 时间及空间复杂度 基数排序基础版代码 及输出结果 计数排序函数 基数排序函数 可视化输出 另一种思路 完整版代码 复习梗概 思想 如何取数字各个位位数 计数排序保证稳定性 ...

  8. 快速排序 C++代码实现及其算法思想及时间复杂度分析及优化 恋上数据结构笔记

    文章目录 复习梗概 算法思想 算法复杂度分析及稳定性 如何优化? 快速排序改进版代码C++ 快速排序个人青春版代码 完整代码 复习梗概 算法思想,别的排序名字直接就能让人联想到它的算法思想,唯独快速排 ...

  9. 2021-10-16 集合(set)与映射(map) 恋上数据结构笔记

    文章目录 集合(Listset and Treeset) 集合时间复杂度分析 Treeset的局限性 映射(Map) Map与Set 集合(Listset and Treeset) 概念:就是不存储重 ...

最新文章

  1. rop检查_注意!这几类人一定要定期检查眼底!
  2. python可以提高程序执行速度N倍你知道吗?
  3. 模拟便于直接存取的索引文件结构_07016.2.0使用Solr7对结构化csv文件建立全文索引...
  4. ES Filebeat 使用 Pipeline 处理日志中的 @timestamp
  5. eclipse字体大小设置教程(eclipse主窗口和控制台字体大小设置)
  6. 20170627——【肿瘤】肿瘤的异质性
  7. 基于CCS工程MSP430串口升级(二)
  8. mac连不上android手机助手,安卓设备连接不上爱思助手时怎么办?
  9. 2016蓝桥杯b组java试题及答案_2016年第七届蓝桥杯java B组省赛试题
  10. Volumes 数据卷管理
  11. 没有shell63号单元_如何在Ansys/lsdyna中给Shell 163 赋值变厚度(注:不是Ansys下的Shell63号单元)...
  12. 使用关键字like进行模糊查询
  13. 论文邮箱不是导师的_考研初试成绩出来后,可以给导师群发邮件吗?想发邮件要做到三点...
  14. 第一部分 Rx快速入门
  15. finalcut内存不足_final cut pro 内存不足可以更改缓存空间吗 final cut pr
  16. mysql installer 下载_MySQL Installer
  17. c语言如何在1序号方编程,《基于ZG211使用C语言编程的电子钟显示设计最终版》...
  18. gap year_为什么中国大学生很少选择间隔年(gap year)?
  19. lua-luaStudio安装
  20. 切图具体需要切什么内容_档案管理:档案具体如何保管?保管工作的内容都有什么?...

热门文章

  1. webstorm打开网页_网页前端之HTML+CSS+JS
  2. Python 定时任务框架 APScheduler
  3. TCP/IP总结(4)TCP之4次挥手
  4. EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”
  5. EOS账户系统(4)账户权限分级
  6. JavaScript之 Array(数组) 对象
  7. java常见不可变类_Java语言不可变类的诀窍
  8. wxWidgets学习 (1) -- Hello World 详解
  9. “白痴“上帝视角调节反序列化链之CC2
  10. ProxyShell利用分析1——CVE-2021-34473