2021-10-21 二叉堆 恋上数据结构笔记
文章目录
- 引言:Top K问题
- 堆
- 二叉堆
- 二叉堆的实现原理
- 二叉堆的添加原理
- 二叉堆的删除
- 批量建堆(自上而下的上滤与自下而上的下滤)及其效率对比
引言:Top K问题
堆
二叉堆
二叉堆的实现原理
- 二叉堆(以最大堆为例)的原理:是一棵每个结点都大于其子结点的完全二叉树0
- 二叉堆的实现:二叉堆是通过动态数组的形式实现的,其中动态数组存储结点的顺序和层序遍历相同。
二叉堆的添加原理
- 首先你要知道二叉堆通过动态数组实现,且排列顺序与层序遍历顺序相同
- 其次,二叉堆是一个每个结点都大于其左右子结点的树
- 那么,我们如何保证二叉堆每添加一个新元素,而二叉堆还能保持这个性质呢?而且在动态数组中我们添加时应该如何处理新元素的位置呢?如下图向一颗二叉堆中添加80
- 树中具体原理: 添加新元素时,新元素初始位置在完全二叉树的尾部(就是层序遍历的最后一个结点后),然后与父结点比较大小,如果大于父结点,就和父结点交换位置,如此反复,直到小于父结点或者没有父结点了。
- 动态数组中的具体原理:联想树中原理,转化为动态数组就需要定位父结点在动态数组中的位置,也就是下面这些性质,如果根结点是0,新结点是i,则父结点就是i-1/2 向下取余,根结点是1,新结点是i,则父结点就是i/2 向下取余。知道了父结点的位置,剩下的和树中操作相同
8.
二叉堆的删除
二叉堆的删除和添加类似,但是最大堆只在堆顶(根)处进行删除
- 首先把数组末尾的元素替换掉数组的第一个元素,即覆盖根结点
- 新的小根结点与其两个子结点进行比较,与其中较大的那一个交换位置
- 不断重复比较和交换的过程,直到没有子结点或者大于所有子结点为止
批量建堆(自上而下的上滤与自下而上的下滤)及其效率对比
相当于一个一个添加 (自上而下的上滤)
不完全等同于一个一个删除,但是过程类似
2021-10-21 二叉堆 恋上数据结构笔记相关推荐
- 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记
复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...
- 堆排序 C++代码实现及思想 排序过程输出 恋上数据结构笔记
复习梗概 文章目录 复习梗概 什么是堆思想? 堆排序算法怎么来的? 什么是下滤?代码 什么是建堆?代码 堆排序本体 代码及排序过程输出 和时间复杂度 完整代码 什么是堆思想? 最大堆:树形结构,每一个 ...
- 计数排序及其改进 C++代码实现与分析 恋上数据结构笔记
文章目录 复习梗概 算法思想 基础思想 改进空间复杂度,改进不能对负数进行排序问题 改进稳定性 计数排序时间空间复杂度 计数排序基础版 代码及输出 计数排序第一次改进版 代码及输出 计数排序终极版 代 ...
- 插入排序算法 及其二分搜索优化版 C++代码实现 恋上数据结构笔记
复习梗概 文章目录 复习梗概 插入排序算法思想 插入排序时间复杂度与特性(多少,与什么有关?) 插入排序基础版 插入排序2nd优化版(优化了哪里?) !!!插入排序二分搜索优化版(优化了哪里?如何优化 ...
- 2021-10-15 红黑树 概念和平衡操作理解以及与AVL对比分析 恋上数据结构笔记
文章目录 红黑树的由来 红黑树需要遵守的五大规则 红黑树与4阶B树的相互转换!! 红黑树的插入(12种情况) 红黑树的删除(3大类情况) 红黑树的平衡 以及与AVL树的性能比较 红黑树的由来 红黑树: ...
- 2021-10-11 ! AVL树 及其平衡调整 四种情况 恋上数据结构笔记 (考过)
b站有个up讲的很详细 https://www.bilibili.com/video/BV1xE411h7dd?from=search&seid=11383601726930144190&am ...
- 基数排序及其思想 C++代码实现及分析 恋上数据结构笔记
文章目录 复习梗概 算法思想 时间及空间复杂度 基数排序基础版代码 及输出结果 计数排序函数 基数排序函数 可视化输出 另一种思路 完整版代码 复习梗概 思想 如何取数字各个位位数 计数排序保证稳定性 ...
- 快速排序 C++代码实现及其算法思想及时间复杂度分析及优化 恋上数据结构笔记
文章目录 复习梗概 算法思想 算法复杂度分析及稳定性 如何优化? 快速排序改进版代码C++ 快速排序个人青春版代码 完整代码 复习梗概 算法思想,别的排序名字直接就能让人联想到它的算法思想,唯独快速排 ...
- 2021-10-16 集合(set)与映射(map) 恋上数据结构笔记
文章目录 集合(Listset and Treeset) 集合时间复杂度分析 Treeset的局限性 映射(Map) Map与Set 集合(Listset and Treeset) 概念:就是不存储重 ...
最新文章
- rop检查_注意!这几类人一定要定期检查眼底!
- python可以提高程序执行速度N倍你知道吗?
- 模拟便于直接存取的索引文件结构_07016.2.0使用Solr7对结构化csv文件建立全文索引...
- ES Filebeat 使用 Pipeline 处理日志中的 @timestamp
- eclipse字体大小设置教程(eclipse主窗口和控制台字体大小设置)
- 20170627——【肿瘤】肿瘤的异质性
- 基于CCS工程MSP430串口升级(二)
- mac连不上android手机助手,安卓设备连接不上爱思助手时怎么办?
- 2016蓝桥杯b组java试题及答案_2016年第七届蓝桥杯java B组省赛试题
- Volumes 数据卷管理
- 没有shell63号单元_如何在Ansys/lsdyna中给Shell 163 赋值变厚度(注:不是Ansys下的Shell63号单元)...
- 使用关键字like进行模糊查询
- 论文邮箱不是导师的_考研初试成绩出来后,可以给导师群发邮件吗?想发邮件要做到三点...
- 第一部分 Rx快速入门
- finalcut内存不足_final cut pro 内存不足可以更改缓存空间吗 final cut pr
- mysql installer 下载_MySQL Installer
- c语言如何在1序号方编程,《基于ZG211使用C语言编程的电子钟显示设计最终版》...
- gap year_为什么中国大学生很少选择间隔年(gap year)?
- lua-luaStudio安装
- 切图具体需要切什么内容_档案管理:档案具体如何保管?保管工作的内容都有什么?...
热门文章
- webstorm打开网页_网页前端之HTML+CSS+JS
- Python 定时任务框架 APScheduler
- TCP/IP总结(4)TCP之4次挥手
- EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”
- EOS账户系统(4)账户权限分级
- JavaScript之 Array(数组) 对象
- java常见不可变类_Java语言不可变类的诀窍
- wxWidgets学习 (1) -- Hello World 详解
- “白痴“上帝视角调节反序列化链之CC2
- ProxyShell利用分析1——CVE-2021-34473