建堆的时间复杂度详解
接上之前堆的博客,里面我曾提过建堆的时间复杂度是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) ;
建堆的时间复杂度详解相关推荐
- python标准类型内建模块_Python内建模块struct实例详解
本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...
- 数据结构与算法之时间复杂度详解
数据结构与算法之时间复杂度详解 目录 排序算法的介绍和分类 算法的时间复杂度概念 常见的时间复杂度解析 平均时间复杂度和最坏时间复杂度 空间复杂度介绍 1. 排序算法的介绍和分类 排序算法的介绍 排序 ...
- 《方块方舟》自定义服务器工具,方舟方块世界怎么自建服务器 自建服务器方法内容详解-游侠网...
方块方舟怎么自建服务器?很多玩家都想要自建立一个服务器,之前刚刚有了一个解决方案.小编就为大家整理好了方舟方块世界自建服务器方法内容详解,正在苦恼的玩家们还不快点进来看看? 游戏自建服务器方法内容解析 ...
- 两种方法推导建堆的时间复杂度O(n)
可以通过siftdown或者siftup建立二叉堆. siftdown: 如果节点小于其最大的子节点,将二者进行交换,直到节点大于或等于所有子节点.整个过程节点向下调整. siftup: 如果节点大于 ...
- mysql数据类型设计说明_MySQL的数据类型和建库策略分析详解
MySQL的数据类型和建库策略分析详解 更新时间:2008年04月06日 01:16:47 作者: 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构.充分利用空间是十分必要的 ...
- 冒泡排序、选择排序、插入排序算法及时间复杂度详解
冒泡.选择.插入排序算法及其时间复杂度详解 冒泡排序 选择排序 插入排序 冒泡排序 流程: 把0到N个元素中的最大值放在N位置 把0到N-1个元素中的最大值放在N-1位置 把0到N-2个元素中的最大值 ...
- 建oracle簇表,详解ORACLE簇表、堆表、IOT表、分区表
详解ORACLE簇表.堆表.IOT表.分区表 簇和簇表 簇其实就是一组表,是一组共享相同数据块的多个表组成.将经常一起使用的表组合在一起成簇可以提高处理效率. 在一个簇中的表就叫做簇表.建立顺序是:簇 ...
- 【数据结构】堆,大根堆,小根堆,优先队列 详解
目录 堆 1.堆的数组实现 2.小根堆 3.大根堆 4.优先队列 例题 1.SP348 EXPEDI - Expedition(有趣的贪心思路,优先队列) 2.合并果子 堆 要了解堆之前,请先了解树, ...
- java内存优化详解_jvm堆内存优化详解
在日常的运维工作中用到tomcat,都需要对tomcat中的jvm虚拟机进行优化,只有知道需要优化参数的具体用处,才能深刻体会优化jvm的意义所在. 在平常的工作中我们谈对jvm的优化,主要是针对ja ...
最新文章
- matlab 级联cic,Matlab中CIC滤波器的应用
- 静态页面访问缓慢的问题
- linux 控制网卡流量,如何管理和控制多网卡 Linux 虚拟机的流量走向
- Git:Rebase和Merge之间的区别,看完这篇文章你就懂了!
- jacobi matlab程序,jacobi迭代法实验MATLAB程序数值分析
- java一元稀多项式_数据结构之线性表- 一元稀疏多项式计算器
- 电子元器件晶体二极管的识别和检测注意事项
- 将两个PCB文件合并成一个文件
- 计算机出现蓝屏怎么恢复,电脑蓝屏怎么解决,小编教你如何恢复正常
- kafka单条消息太大引起的线上故障
- android 基带版本,手机基带是什么?手机的基带版本是什么意思?
- RabbitMQ-全面详解(学习总结---从入门到深化)
- 使用python对在线网易有道翻译接口进行分析及破解js加密
- 【干货分享】IOS非越狱渠道运营必知的10条
- 面向Web的数据挖掘
- 从0到1搭建一个Spring Boot项目【第一个接口】
- laravel的配置文件
- 游戏辅助原理与制作02-植物大战僵尸00-概述
- 女人的超短裙被刮开后
- BaseServlet的抽取:java.lang.NoSuchMethodException: cn.itcast.travel.web.servlet.UserServlet.add(javax.s
热门文章
- 【蓝桥杯】右直角三角形
- 云台山风景区五一黄金周最后一天游客络绎不绝
- 解决windows系统powershell命令行无法使用代理的问题
- pytorch BN层报错:ValueError: expected 4D input (got 2D input)
- CMake Error at D:/opencv/opencv-3.4.6/sources/cmake/OpenCVModule.cmake:36,,,OpenCV has already loade
- 深度揭秘:抖音短视频一天涨粉一万怎么做:国仁楠哥
- ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动
- 联想硬盘保护系统从6.5升级到7.6 过程概要
- 计算机安全和网络保密管理工作职责,某局网络安全和保密工作总结
- 2022年海南最新建筑八大员(机械员)模拟考试题库及答案