首页 > 其他分享 >数据结构 ---> 二叉树 -->堆之解析_01

数据结构 ---> 二叉树 -->堆之解析_01

时间:2023-04-21 12:37:22浏览次数:34  
标签:10 01 -- oss process 二叉树 解析 image

老友们好 !本期将对堆之构建进行解说 !

相信,初学此章节的老友 !!或多或少,对前一期的部分代码,有所困惑!

说真的,堆的有些内容理解起来还是挺困难的!

好了,废话不多讲!开始本期的解析之旅吧 !希望大家都能有所收获 !!

下面,先看一组,上一期的图示:>

数据结构 ---> 二叉树 -->堆之解析_01_堆之构建解析

那么该如何操作,才能取得前几名的数值呢?

针对这点,部分老友,可能,会用数组的覆盖原理 !

即是 将堆顶元素弹出后,再找出次大的数值。这一后续过程,想到了值的覆盖原理 !那么,究竟是否正确?弊端在哪里?

下列图示,可为老友们,解答疑惑 !

数据结构 ---> 二叉树 -->堆之解析_01_堆之构建解析_02

由上图可知,按照上述想到的方法,显然会出现严重的 “紊乱”现象发生!即是 父子兄弟关系,全部乱套了 !!

这样子,不仅效率低下,而且再找次大的时候,需要对剩余元素重新进行建堆 !而每一次建堆的时间复杂度是 O(N*logN)

有关于,建堆之时间复杂度,会在后续章节进行讲解 !!

而对上述问题,解决之道是封装一个函数,进行每次查找的时候

时间复杂度是 O(N) 这意味着,只需要每一次查找,遍历一遍即可,根本无须一遍又一遍的建堆操作 !!

然而这块思想逻辑的实现,是本章节的一大难点之一 !不好理解 !

下面图示,就是上一期所写就的 向上调整算法 !!

称之为算法,在这里一点儿都不过分 !!

数据结构 ---> 二叉树 -->堆之解析_01_边界值问题_03

请注意,上述红色方框内的 条件判断 !!

而很多老友,不明白这种思想逻辑;

甚至对前面的二叉树遍历,并没有打牢基础,会很容易掉进坑里 !!

下面展现错误写法 :>

数据结构 ---> 二叉树 -->堆之解析_01_向下调整算法_04

这种写法,逻辑上的漏洞是在那里?先说答案好了!

----> "parent" 与 “child” 会最终重合在一起,无法进行建大堆操作

数据结构 ---> 二叉树 -->堆之解析_01_向下调整算法_05

如上图所示,是小堆,然后建立大堆

若还是比较难理解,只需,将parent取特殊值检验即可

比如,令 parent = 0 ;进入循环体之后,满足条件,“孩子结点”更新为 下标是 0;此后“双亲结点”也会被更新为 下标是 0,注意取整操作,虽然 双亲结点---> parent = (0 - 1)/ 2 ---> - 1 / 2 , 取整后仍然是 0 ,此时便不符合建立大堆要求 !

现在,剖析一下,错误想法的来源,其实这才是有意思的地方 !

标签:10,01,--,oss,process,二叉树,解析,image
From: https://blog.51cto.com/u_15808800/6212512

相关文章

  • 画一个带统计检验的PCoA分析结果
    前情回顾方差分析基本概念:方差分析中的“元”和“因素”是什么?PERMANOVA原理解释:这个统计检验可用于判断PCA/PCoA等的分群效果是否显著!经过前面的铺垫,下面来实战一下,理论应用于实际看看会出现什么问题?PERMANOVA实战(一)采用vegan包自带的一套数据(也解释了如何自己准备数据)看下PER......
  • BIOS
    配置开发环境,写一个helloworld驱动程序编写基本的驱动程序代码结构,导出为自定义项目模板,方便以后使用模板创建项目,少写一些样板代码;同时了解了wdk的ntifs头文件和预处理指令#pragmaonce  vscode联机搜索文档 开发三件套: 调试器WinDbg(X64)+虚拟机VirtualBox+编译器VSc......
  • 方差分析中的“元”和“因素”是什么?
    试验中要考察的指标称为试验指标,影响试验指标的条件称为因素,因素所处的状态称为水平(通常用于3个或更多水平时;如果只有2个水平考虑T-test);若试验中只有一个因素改变则称为单因素试验,若有两个因素改变则称为双因素试验,若有多个因素改变则称为多因素试验。方差分析就是对试验数据进......
  • 2022山东省职业院校技能大赛物联网赛项(高职组)windows维护
    任务要求:netsh(NetworkShell)是一个windows系统本身提供的功能强大的网络配置命令行工具,请选手在命令提示符窗口中使用命令将netsh的配置信息导出到c:\interface.txt文件中。在服务器计算机进行配置,指定每个shell的最大内存数量为150MB。完成以上任务后请......
  • gganimate|让你的图动起来!!!
    这是ggplot中十分可爱的一个扩增包,目的只有一个,就是让你的图动起来!就是酱紫!!gganimate扩展了ggplot2实现的图形语法,包括动画描述。它通过提供一系列新的语法类来实现这一点,这些类可以添加到绘图对象中,以便自定义它应该如何随时间变化。下面是他的parameter:transition_*()定义了数据......
  • jmeter生成html测试报告(二)
    利用jmeter自带工具:GenerateHTMLreport生成html测试报告:1、打开jmeter测试工具,选择Tools,选择GenerateHTMLreport; 2、完善生成生成报告所需要的内容: 3、点击生成即可 4、根据导出报告的目录即可找到html测试报告了  ......
  • 什么配置的电脑可满足基因组索引构建的需求?
    经常有朋友问起自己要做什么分析,推荐一个电脑的配置。通常限制程序运行的最主要因素是内存,内存不足程序会直接运行不起来,CPU性能弱顶多是运行的慢,硬盘比较便宜,不需要特别评估。针对这个问题,我们准备推出一系列测试推文,统计计算常用软件的运行时间、所需的最大物理内存(后面统计的都......
  • 二维数组遍历
    publicstaticvoidmain(String[]args){int[][]arr={{11,22,33},{44,55,66}};printArray(arr);intsum=getSum(arr);System.out.println("求和累加为:"+sum);}/*二维数组......
  • 【Nginx】valid_referers 参数绕坑指南
    Nginx提供了valid_referers参数用于检查url中refer参数的状态,首先看下官方配置:Syntax:valid_referersnone|blocked|server_names|string...;Default: —Context: server,location123能看到valid_referers总共有4种值可以使用,none、blocked、server_names、string。我......
  • 单调队列优化
    1.子矩阵来源:第十四届蓝桥杯省赛C++C组题目链接题目描述给定一个$n×m$($n$行$m$列)的矩阵。设一个矩阵的价值为其所有数中的最大值和最小值的乘积。求给定矩阵的所有大小为$a×b$($a$行$b$列)的子矩阵的价值的和。答案可能很大,你只需要输出答案对$998244353......