堆排序中的上滤和下滤
这两个地方搞了好多次,每次做题的时候都容易忘记,现在把其特点记下来。
首先是下滤,就是把当前节点向下寻找其应该在的位置,它要求当前节点的左右子节点都满足堆的性质。最多的应用在堆排序的过程中:每次把最大堆的第一个节点(最大)和当前排序队列的最后一个元素交换,这样当前最大值就去了该去的地方,再对当前首元素进行下滤。其次还有删除节点。
其次是上滤,这就是把当前节点向上寻找其该在的位置。重点是明白它的要求是必须保证当前节点以及是个最大,最小堆。要不然,如果当前节点和这个节点的全部子节点形成的队列不是个最大,最小堆得话,上滤是没有意义的,因为并没有把真正最大,最小的元素“滤”上去。它最多的应用是插入节点。
构造堆得过程有2种方式。
1,循环每一个无序元素,把它插入到最大堆得末尾然后上滤。
2,直接从最后一个非叶子节点的元素开始往根节点下滤。
这里第一种方式没啥可以说的。主要是第二种。我也不知道问什么每次做题都要一愣,甚至好几次没做出来。看来还是理解不深。
首先为什么要从倒数第一个非叶子节点开始。首先对于叶子节点,明显下滤是没有意义的,因为没有子节点下滤当然还是不变。其次解释为什么要从后往前。这里要真的明白下滤的意义。下滤的要求是当前节点的左节点和右节点都已经是最大堆了。那么如果从根节点开始下滤,它怎么保证这一点呢?所以必须从第一个有意义的节点(也就是倒数第一个非叶子节点)开始,从后往前下滤,每次下滤的时候因为前面下滤过了,可以保证当前下滤的时候,当前节点的左右子节点都是最大堆。到最后根节点当然就让整个队列都变成最大堆了。
转载于:https://www.cnblogs.com/dsj2016/p/5661679.html
堆排序中的上滤和下滤相关推荐
- Java 中的上转型和下转型
在我们的日常中,上转型和下转型都使用的比较少,所以当别人问起来什么是上转型,什么是下转型,自己往往一片模糊,或者不能将他们进行明显的区分. 在这里,我将以我个人理解来论述上下转型,希望对大家有帮助,如 ...
- mysql 按重复排序_php-按日期排序并允许重复的日期时,获取MySQL中的上一个和下一个记录...
我已经尝试寻找其他帮助来解决这个问题,但是我没有得到.假设我有一张看起来像下面的表格. +----+--------------+------------+ | id | date_col | lab ...
- 彻底分清机器学习中的上采样、下采样、过采样、欠采样【总结】
今天看了篇中文的硕士论文,读着读着感觉有点奇怪,仔细一看原来他把下采样和欠采样搞混了,这里笔者就详细区分一下各个名称的概念. 文章目录 1. 上采样&下采样 2.过采样&欠采样 3.信 ...
- 图像语义分割中的上采样(Upsampling)和下采样(subsampling)
图像语义分割中的上采样和下采样 1. 下采样(subsampled) 2. 上采样(upsampled) 2.1 线性插值 2.2 单线性插值 2.3 双线性插值 2.4 双线性插值举例 2.5 插值 ...
- Android 上拉,下拉刷新。RecyclerView的使用(最后附完整代码)
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widge ...
- 滤了asa,cer,cdx,php,aspx等脚本类型的上传情况下添加一个ashx的上传类型
今天日一站 发现后台可以设置上传类型,但是asp,asa,cer等等都不行,上传之后就提示下载 尝试着关闭了下了,还是不行,后来找到了一位前辈写的文章 过滤了asa,cer,cdx,php,aspx等 ...
- WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。...
WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法. 原文:WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法. 版权声明:我不 ...
- Java黑皮书课后题第8章:**8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下。1表示正面0表示反面,每个状态使用一个二进制数表示。使用十进制数表示状态
**8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下.1表示正面0表示反面,每个状态使用一个二进制数表示. 题目 题目描述与运行示例 破题:注意对应关系(已 ...
- Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法...
bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore ...
最新文章
- 递归--练习4--noi666放苹果
- 十天精通CSS3(3)
- mysql 多表查询练习题_mysql多表查询练习
- Web应用安全--攻防对抗发展趋势
- html5在线音乐列表播放器,HTML5列表音乐播放器SMusic
- [蓝桥杯][算法提高VIP]摆花-多重背包计数问题
- php 在字符串中 找数字,php提取字符串中的数字
- wordpress黑镜2.0作品图片素材类网站模板
- 【英语学习】【Level 07】U03 Amazing wonders L2 A global city
- mysql 5.7 编译_MySQL5.7.20编译安装
- C++ std::vector 自定义排序
- Matlab训练BP神经网络的一般步骤
- 医疗新基建,更需新安全
- Fortran 中的common,include和module
- java cim客户端_高效使用 SBLIM CIM Client
- Don’t Miss the Labels: Label-semantic Augmented Meta-Learner for Few-Shot Text Classification
- RTKlib相对定位源码解析: udstate函数
- c# datetime._C#| DateTime.TimeOfDay属性(带示例)
- struct的构造函数
- Python编程进阶 高级变量(看完就会了)