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

带你了解建堆的时间复杂度

目录

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

1.向上调整建堆的时间复杂度O(N*logN)

2.数学论证

 3.相关代码

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

1.建堆的时间复杂度为O(N)

2.数学论证

3.相关代码

完结撒花✿✿ヽ(°▽°)ノ✿✿


博主建议:面试的时候可能会被面试官问到建堆时间复杂度的证明过程,最好背下来,到时候能回答出你就是最靓的仔!!!

     注:堆是完全二叉树,但以满二叉树来分析的原因:

  1. 方便进行数学论证
  2. 满二叉树是特殊的完全二叉树
  3. 满二叉树挂的节点最多,与时间复杂度的计算一般是求是求算法的最坏运行情况相符
  4. 时间复杂度本来看的就是近似值,多几个节点不影响最终结果

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

注:一般采用的都是向下调整的方式建堆的,用向上调整建堆比较少

1.向上调整建堆的时间复杂度O(N*logN)

2.数学论证

 3.相关代码

   //向上调整来建堆,时间复杂度为 O(n*logN)Queue<Integer> minHeap = new PriorityQueue<>();for (int i : arr) {minHeap.offer(i);}//向上调整private void shiftUp(int child) {int parent = (child - 1) / 2;while (child > 0) {if (elem[child] > elem[parent]) {int tmp = elem[child];elem[child] = elem[parent];elem[parent] = tmp;child=parent;parent = (child - 1) / 2;} else {break;}}}

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

1.建堆的时间复杂度为O(N)

2.数学论证

3.相关代码

    /** 创建大根堆的时间复杂度:O(N)* 以满二叉树(挂的节点最多,是特殊的完全二叉树)来分析* */public void createHeap() {for (int parent = (usedSize - 1 - 1) / 2; parent >= 0; parent--) {shiftDown(parent, usedSize);}}/** 父亲下标* 每棵树的结束下标* */private void shiftDown(int parent, int len) {//向下调整int child = parent * 2 + 1;//最起码 要有左孩子while (child < len) {//一定是有右孩子的情况下if (child + 1 < len && elem[child] < elem[child + 1]) {child++;}//点评:这代码写得有意思!!!//child下标一定是左右孩子 最大值的下标if (elem[child] > elem[parent]) {int tmp = elem[child];elem[child] = elem[parent];elem[parent] = tmp;parent = child;child = 2 * parent + 1;} else {break;}}}

完结撒花✿✿ヽ(°▽°)ノ✿✿

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

相关文章:

  • 人工智能原理(6)
  • 单片机模块化编程文件创建流程
  • docker image
  • 力扣75——单调栈
  • Webpack和Parcel详解
  • linux系统服务学习(六)FTP服务学习
  • 7.原 型
  • 【图像分类】理论篇(2)经典卷积神经网络 Lenet~Resenet
  • C++系列-内存模型
  • [管理与领导-30]:IT基层管理者 - 人的管理 - 向上管理,管理好你的上司,职业发展事半功倍。什么样的上司不值得跟随?
  • Java进阶篇--迭代器模式
  • 【CAM】CAM(Class Activation Mapping)——可视化CNN的特征定位
  • Maven教程_编程入门自学教程_菜鸟教程-免费教程分享
  • Gof23设计模式之模板方法模式
  • springBoot 配置文件 spring.resources.add-mappings 参数的作用
  • 《Java极简设计模式》第03章:工厂方法模式(FactoryMethod)
  • C++11并发与多线程笔记(11) std::atomic续谈、std::async深入谈
  • React快速入门
  • windows权限维持—SSPHOOKDSRMSIDhistorySkeletonKey
  • CSS 两栏布局和三栏布局的实现
  • 消息中间件相关面试题
  • 成集云 | 电子签署集成腾讯云企业网盘 | 解决方案
  • 提升大数据技能,不再颓废!这6家学习网站是你的利器!
  • uniapp开发小程序-有分类和列表时,进入页面默认选中第一个分类
  • 小程序-uni-app:hbuildx uni-app 安装 uni-icons 及使用
  • PHP中in_array()函数用法详解
  • 热电联产在综合能源系统中的选址定容研究(matlab代码)
  • 校园网安全风险分析
  • kafka--kafka的基本概念-topic和partition
  • 【LVS】3、LVS+Keepalived群集