接上之前堆的博客,里面我曾提过建堆的时间复杂度是O(N),那么是为什么呢?下面进行推导

按照最坏情况,该堆是满二叉树,如上图

又依据公式:

黑色框圈住的代表的是每层有的节点的个数

第一层有2^(1-1) 个,第二层又2^(2-1)个,第h-1层有2^(h-1-1)个,第h层又2^(h-1)个

红色框圈住的代表的是每一层的字树最多需要向下调整的次数

我们假设这个二叉树有四层,第一层需要向下调整的次数是3次,第二层是两次,第三层是1次,第四层是0次,推广到这个二叉树有h层,第一层就是h-1次,第二层是h-2次....第h-1层就是1次,第h层就是0次。

黑色框中的数乘以红色框中的数,代表着,每层的节点一共需要向下调整的次数。

假设这个满二叉树有四层

以第三层为例,第三层有4个结点,一个节点最多需要向下调整1次,那么4个节点一共需要向下调整4次

最后将每层节点需向下调整的次数相加就是最终的时间复杂度。

也就是下图。

利用错位相减法计算

最终结果是 N-log(N+1) ,由于当N趋于很大时,log(N+1)可以忽略,

所以建堆的时间复杂度就是 O(N) ;

建堆的时间复杂度详解相关推荐

  1. python标准类型内建模块_Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...

  2. 数据结构与算法之时间复杂度详解

    数据结构与算法之时间复杂度详解 目录 排序算法的介绍和分类 算法的时间复杂度概念 常见的时间复杂度解析 平均时间复杂度和最坏时间复杂度 空间复杂度介绍 1. 排序算法的介绍和分类 排序算法的介绍 排序 ...

  3. 《方块方舟》自定义服务器工具,方舟方块世界怎么自建服务器 自建服务器方法内容详解-游侠网...

    方块方舟怎么自建服务器?很多玩家都想要自建立一个服务器,之前刚刚有了一个解决方案.小编就为大家整理好了方舟方块世界自建服务器方法内容详解,正在苦恼的玩家们还不快点进来看看? 游戏自建服务器方法内容解析 ...

  4. 两种方法推导建堆的时间复杂度O(n)

    可以通过siftdown或者siftup建立二叉堆. siftdown: 如果节点小于其最大的子节点,将二者进行交换,直到节点大于或等于所有子节点.整个过程节点向下调整. siftup: 如果节点大于 ...

  5. mysql数据类型设计说明_MySQL的数据类型和建库策略分析详解

    MySQL的数据类型和建库策略分析详解 更新时间:2008年04月06日 01:16:47   作者: 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构.充分利用空间是十分必要的 ...

  6. 冒泡排序、选择排序、插入排序算法及时间复杂度详解

    冒泡.选择.插入排序算法及其时间复杂度详解 冒泡排序 选择排序 插入排序 冒泡排序 流程: 把0到N个元素中的最大值放在N位置 把0到N-1个元素中的最大值放在N-1位置 把0到N-2个元素中的最大值 ...

  7. 建oracle簇表,详解ORACLE簇表、堆表、IOT表、分区表

    详解ORACLE簇表.堆表.IOT表.分区表 簇和簇表 簇其实就是一组表,是一组共享相同数据块的多个表组成.将经常一起使用的表组合在一起成簇可以提高处理效率. 在一个簇中的表就叫做簇表.建立顺序是:簇 ...

  8. 【数据结构】堆,大根堆,小根堆,优先队列 详解

    目录 堆 1.堆的数组实现 2.小根堆 3.大根堆 4.优先队列 例题 1.SP348 EXPEDI - Expedition(有趣的贪心思路,优先队列) 2.合并果子 堆 要了解堆之前,请先了解树, ...

  9. java内存优化详解_jvm堆内存优化详解

    在日常的运维工作中用到tomcat,都需要对tomcat中的jvm虚拟机进行优化,只有知道需要优化参数的具体用处,才能深刻体会优化jvm的意义所在. 在平常的工作中我们谈对jvm的优化,主要是针对ja ...

最新文章

  1. matlab 级联cic,Matlab中CIC滤波器的应用
  2. 静态页面访问缓慢的问题
  3. linux 控制网卡流量,如何管理和控制多网卡 Linux 虚拟机的流量走向
  4. Git:Rebase和Merge之间的区别,看完这篇文章你就懂了!
  5. jacobi matlab程序,jacobi迭代法实验MATLAB程序数值分析
  6. java一元稀多项式_数据结构之线性表- 一元稀疏多项式计算器
  7. 电子元器件晶体二极管的识别和检测注意事项
  8. 将两个PCB文件合并成一个文件
  9. 计算机出现蓝屏怎么恢复,电脑蓝屏怎么解决,小编教你如何恢复正常
  10. kafka单条消息太大引起的线上故障
  11. android 基带版本,手机基带是什么?手机的基带版本是什么意思?
  12. RabbitMQ-全面详解(学习总结---从入门到深化)
  13. 使用python对在线网易有道翻译接口进行分析及破解js加密
  14. 【干货分享】IOS非越狱渠道运营必知的10条
  15. 面向Web的数据挖掘
  16. 从0到1搭建一个Spring Boot项目【第一个接口】
  17. laravel的配置文件
  18. 游戏辅助原理与制作02-植物大战僵尸00-概述
  19. 女人的超短裙被刮开后
  20. BaseServlet的抽取:java.lang.NoSuchMethodException: cn.itcast.travel.web.servlet.UserServlet.add(javax.s

热门文章

  1. 【蓝桥杯】右直角三角形
  2. 云台山风景区五一黄金周最后一天游客络绎不绝
  3. 解决windows系统powershell命令行无法使用代理的问题
  4. pytorch BN层报错:ValueError: expected 4D input (got 2D input)
  5. CMake Error at D:/opencv/opencv-3.4.6/sources/cmake/OpenCVModule.cmake:36,,,OpenCV has already loade
  6. 深度揭秘:抖音短视频一天涨粉一万怎么做:国仁楠哥
  7. ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动
  8. 联想硬盘保护系统从6.5升级到7.6 过程概要
  9. 计算机安全和网络保密管理工作职责,某局网络安全和保密工作总结
  10. 2022年海南最新建筑八大员(机械员)模拟考试题库及答案