这两个地方搞了好多次,每次做题的时候都容易忘记,现在把其特点记下来。

首先是下滤,就是把当前节点向下寻找其应该在的位置,它要求当前节点的左右子节点都满足堆的性质。最多的应用在堆排序的过程中:每次把最大堆的第一个节点(最大)和当前排序队列的最后一个元素交换,这样当前最大值就去了该去的地方,再对当前首元素进行下滤。其次还有删除节点。

其次是上滤,这就是把当前节点向上寻找其该在的位置。重点是明白它的要求是必须保证当前节点以及是个最大,最小堆。要不然,如果当前节点和这个节点的全部子节点形成的队列不是个最大,最小堆得话,上滤是没有意义的,因为并没有把真正最大,最小的元素“滤”上去。它最多的应用是插入节点。

构造堆得过程有2种方式。

1,循环每一个无序元素,把它插入到最大堆得末尾然后上滤。

2,直接从最后一个非叶子节点的元素开始往根节点下滤。

这里第一种方式没啥可以说的。主要是第二种。我也不知道问什么每次做题都要一愣,甚至好几次没做出来。看来还是理解不深。

首先为什么要从倒数第一个非叶子节点开始。首先对于叶子节点,明显下滤是没有意义的,因为没有子节点下滤当然还是不变。其次解释为什么要从后往前。这里要真的明白下滤的意义。下滤的要求是当前节点的左节点和右节点都已经是最大堆了。那么如果从根节点开始下滤,它怎么保证这一点呢?所以必须从第一个有意义的节点(也就是倒数第一个非叶子节点)开始,从后往前下滤,每次下滤的时候因为前面下滤过了,可以保证当前下滤的时候,当前节点的左右子节点都是最大堆。到最后根节点当然就让整个队列都变成最大堆了。

转载于:https://www.cnblogs.com/dsj2016/p/5661679.html

堆排序中的上滤和下滤相关推荐

  1. Java 中的上转型和下转型

    在我们的日常中,上转型和下转型都使用的比较少,所以当别人问起来什么是上转型,什么是下转型,自己往往一片模糊,或者不能将他们进行明显的区分. 在这里,我将以我个人理解来论述上下转型,希望对大家有帮助,如 ...

  2. mysql 按重复排序_php-按日期排序并允许重复的日期时,获取MySQL中的上一个和下一个记录...

    我已经尝试寻找其他帮助来解决这个问题,但是我没有得到.假设我有一张看起来像下面的表格. +----+--------------+------------+ | id | date_col | lab ...

  3. 彻底分清机器学习中的上采样、下采样、过采样、欠采样【总结】

    今天看了篇中文的硕士论文,读着读着感觉有点奇怪,仔细一看原来他把下采样和欠采样搞混了,这里笔者就详细区分一下各个名称的概念. 文章目录 1. 上采样&下采样 2.过采样&欠采样 3.信 ...

  4. 图像语义分割中的上采样(Upsampling)和下采样(subsampling)

    图像语义分割中的上采样和下采样 1. 下采样(subsampled) 2. 上采样(upsampled) 2.1 线性插值 2.2 单线性插值 2.3 双线性插值 2.4 双线性插值举例 2.5 插值 ...

  5. Android 上拉,下拉刷新。RecyclerView的使用(最后附完整代码)

    <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widge ...

  6. 滤了asa,cer,cdx,php,aspx等脚本类型的上传情况下添加一个ashx的上传类型

    今天日一站 发现后台可以设置上传类型,但是asp,asa,cer等等都不行,上传之后就提示下载 尝试着关闭了下了,还是不行,后来找到了一位前辈写的文章 过滤了asa,cer,cdx,php,aspx等 ...

  7. WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。...

    WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法. 原文:WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法. 版权声明:我不 ...

  8. Java黑皮书课后题第8章:**8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下。1表示正面0表示反面,每个状态使用一个二进制数表示。使用十进制数表示状态

    **8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下.1表示正面0表示反面,每个状态使用一个二进制数表示. 题目 题目描述与运行示例 破题:注意对应关系(已 ...

  9. Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法...

    bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore ...

最新文章

  1. 递归--练习4--noi666放苹果
  2. 十天精通CSS3(3)
  3. mysql 多表查询练习题_mysql多表查询练习
  4. Web应用安全--攻防对抗发展趋势
  5. html5在线音乐列表播放器,HTML5列表音乐播放器SMusic
  6. [蓝桥杯][算法提高VIP]摆花-多重背包计数问题
  7. php 在字符串中 找数字,php提取字符串中的数字
  8. wordpress黑镜2.0作品图片素材类网站模板
  9. 【英语学习】【Level 07】U03 Amazing wonders L2 A global city
  10. mysql 5.7 编译_MySQL5.7.20编译安装
  11. C++ std::vector 自定义排序
  12. Matlab训练BP神经网络的一般步骤
  13. 医疗新基建,更需新安全
  14. Fortran 中的common,include和module
  15. java cim客户端_高效使用 SBLIM CIM Client
  16. Don’t Miss the Labels: Label-semantic Augmented Meta-Learner for Few-Shot Text Classification
  17. RTKlib相对定位源码解析: udstate函数
  18. c# datetime._C#| DateTime.TimeOfDay属性(带示例)
  19. struct的构造函数
  20. Python编程进阶 高级变量(看完就会了)

热门文章

  1. unity 设置软件开机自启
  2. java员工打卡情况_考勤信息(员工打卡)
  3. 编译原理之 短语直接短语句柄 定义与区分
  4. postman——入门基础——概念理解
  5. VBA程序 在PPT中使用宏命令删除空白的文本框
  6. 《分享系列1》30句必背宋词、两本深度学习电子书
  7. 部门中人力资源培养的两点建议
  8. Tomcat内存大小配置
  9. Elasticsearch系列——使用kibana或postman操作Elasticsearch的常用命令(一)
  10. 教育技术专业考研复习备考心得 (北京师范大学)