当前位置: 首页 > news >正文

向上or向下调整建堆 的时间复杂度的本质区别的讲解

知识点:(N代表节点数,h代表高度)

1:高度为h的满二叉树节点个数N为 2^(h)-1  即N =  2^(h)-1 

2:所以h = log(N+1)

一:向上调整建堆的时间复杂度

时间复杂度即:每层节点的个数×每层节点需要向上调整的次数

例:第一层的节点,有2^0个,并且因为向上调整,所以它不用调整

       第二层的节点,有2^1个,因为向上调整,所以需要向上调整一次

      ...................

1:所以可以得到一个次数与高度h的表达式

2:对此式子使用错位相减法:

3:上式减下式得到:

4:再将其凑成:

解释:

1:前面减一个2^0,后面再加一个2^0,式子没改变

然后对最前面的-2^0和红色部分使用等比求和(先总体提一个负号)使用等比求和得到以下:

由前提的两个公式可知:

 1:N =  2^(h)-1 

2:所以h = log(N+1)

将这两个公式替换进去:

根据大O表示法,可知 时间复杂度为: N*logN

二:向下调整建堆的时间复杂度

同理可知: 

时间复杂度即:每层节点的个数×每层节点需要向上调整的次数

区别在于:向下调整,最后一层不用调整,因为已经到了叶子节点

1:所以:

2:错位相减法可得:

 

3:相减得到:

4:再把式子凑一下:

 

解释:-(h-1)即-h+1,把+1 改成 2^0 和前面的式子进行等比求和

最后得到:

再同理用前面两个公式套进去可得:

 根据大O表示法可得时间复杂度为O(N)

 

所以可知向下调整比向上调整更优秀。

 

 

 

 

  

 

 

 

 

 

http://www.lryc.cn/news/425283.html

相关文章:

  • 阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染
  • [游戏开发] LuaTable转string存读二进制文件
  • 光伏业务管理系统的一些妙用功能
  • Java面试八股之请简述消息队列的发布订阅模式
  • 七、2 ADC数模转换器有关函数介绍(Keil5)
  • 了解载波侦听多路访问CSMA(上)
  • 开启教育新征程:“集师” 知识付费平台搭建
  • Vue3 + Electron 创建新的子窗口 且子窗口唯一
  • 海康VisionMaster使用学习笔记2-相机取图及参数设置
  • 【网络】【Linux】Linux内核中连接的组织形式与全连接队列
  • 记录一次 npm ERR! cb() never called! 解决过程
  • WEB渗透免杀篇-加载器免杀
  • 什么是反人性设计?
  • 如何进行长截图的两种方法
  • 基于轨迹的汽车跟随系统横向控制方法
  • 2024年8月15日嵌入式学习
  • C++引用和指针的区别还分不清楚?
  • 【Cesium开发实战】相机捕捉功能,获取当前视图,设定分辨率可下载当前视图图片
  • 基于spring boot的疫情信息管理系统
  • 【秋招笔试】8.11大疆秋招(第二套)-测开岗
  • Vitis AI 基本认知(训练过程)
  • 《SQL 约束:保障数据完整性与准确性的关键防线》
  • Temu半托管即将开通日韩站点,Temu半托管怎么上产品?
  • 谷歌、火狐、Edge浏览器使用allWebPlugin中间件加载ActiveX控件
  • Python利用openpyxl复制Excel文件且保留样式—另存为副本(附完整代码)
  • ITL-Internet Technology Letters
  • Mapreduce_wordcount自定义单词计数
  • 安卓开发中的AppCompat框架使用详解
  • docker中挂桶什么意思
  • 鸿蒙开发Location Kit(位置服务)如何设置