首页 > 其他分享 >堆总结(C语言)

堆总结(C语言)

时间:2024-08-10 21:28:41浏览次数:16  
标签:总结 建堆 元素 堆排序 节点 二叉树 C语言 复杂度

堆总结(C语言)二叉树的顺序结构及实现

堆是什么

堆总是一棵完全二叉树,堆是用来存完全二叉树的,如果存普通的二叉树就会浪费空间。堆(一种二叉树)使用顺序结构的数组来存储。堆不是简单的存储数据,还有些功能,堆可以筛选数据(删堆顶元素)时间复杂度是O(logN)堆排序

在这里插入图片描述

堆的分类

  • 大堆:父节点的值大于等于子节点。
  • 小堆:父节点的值小于等于子节点。

在这里插入图片描述

堆的实现

在这里插入图片描述

堆的向下调整

  • 前提条件:左子树和右子树是堆。
  • 常应用:删除堆顶数据可以堆排序(堆顶是最大(小)的,删数据时,不是将数据整体向前挪动一位,因为这样会效率低下,而且父子兄弟关系混乱,又要重新实现堆,时间复杂度大,是O(N)或O(N*logN),有个牛B的方法就是将首数据与尾数据交换,再Pop最后的数据,再向下调整,这个时间复杂度是O(logN)),建堆,时间复杂度是O(N),向上调整也可以建堆,但是它的时间复杂度是O(N *LogN)。
    在这里插入图片描述
    在这里插入图片描述

可以这样记:二叉树的最后一层大约占一半2^(h-1),倒数第二层的节点大约占1/4,向下调整建堆是节点数量多的层遍历的深度小,上面节点少的层遍历深度大;向上建堆是上面节点少的层遍历深度小,下面节点多的层遍历深度大。

堆的向上调整

  • 前提条件:在插入一个数据之前,是堆。
  • 常应用:向堆插入数据

堆的应用

堆排序

两个步骤:

  1. 建堆

    	升序:建大堆,因为堆顶元素与尾元素互换,最大的放在最后,次大的放在倒二。
    	降序:建小堆
    

2.利用堆思想来进行排序

建堆和堆删除中都用到了向下调整,用向下调整就可以完成堆排序。

TOP-K问题

TOP-K问题:在大量的数据中,求前 K 个最大元素或最小元素。

思路:

1.在数据的前k个元素来建堆
在这里插入图片描述

2.剩下的N-K个元素依次与堆顶元素进行比较
在这里插入图片描述

标签:总结,建堆,元素,堆排序,节点,二叉树,C语言,复杂度
From: https://blog.csdn.net/2301_81236660/article/details/141095545

相关文章

  • 第六周总结
    本周,我专注于科目三的驾驶练习,逐渐熟悉了道路行驶的各种操作要求,包括起步、换挡、加减速、变道等实际驾驶技能。在反复的练习中,我对车辆的操控感更加得心应手,为即将到来的考试奠定了基础。除此之外,我还深入了解了Spark在大数据领域中的重要作用。Spark是一种快速、通用、可扩展的......
  • 快速多项式全家桶 简略总结 (不确定里面的内容对不对)
    多项式牛顿迭代解决的问题:求一个[多项式函数](?)\(G\),使得\(F(G)\equiv0\pmod{x^n}\)。(听XK提到泛函分析)\[G_{k+1}\equivG_k-\frac{F(G_k)}{F'(G_k)}\pmod{x^{2^{k+1}}}\]求导时把\(G\)当成未知数,不要对\(G\)求导。倍增。加法每一项对应......
  • CUDA--内存访问越界或无效的索引操作解决办法--总结
    设备端的断言错误(device-sideasserttriggered)通常发生在CUDA代码中访问无效的内存地址或执行了无效的操作。解决这种错误需要系统地排查代码中的潜在问题。以下是详细的解决方案:1.检查数组边界确保所有访问数组或指针的操作都在有效范围内。检查线程索引和块索引的计算,确......
  • 【时时三省】(C语言基础)操作符3
    山不在高,有仙则名。水不在深,有龙则灵。             ----CSDN时时三省&取地址操作符示例: 每个内存单元都有自己的编号编号就成为内存单元的地址&a就是找出a的地址后面可以加一个int*pa=&a是可以用来存放地址pa是用来存放地址的-pa就是一......
  • 每周总结
    本周在学习Hadoop的过程中,我深入了解了分布式文件系统(HDFS)的原理和操作,并开始接触和使用MapReduce框架进行数据处理和分析。以下是我这周的学习和实践总结:理论学习与实践应用在分布式文件系统(HDFS)的学习中,我掌握了其设计理念、架构和工作原理。HDFS通过将大文件分割成多个块,并将......
  • 第五周总结
    本周我进一步探索了Hadoop生态系统中的其他工具和技术。除了核心的HDFS和MapReduce之外,我还学习了Hive、Pig和Spark等工具。Hive提供了SQL-like查询语言HiveQL,使用户能够轻松进行数据提取、转换和加载(ETL)。Pig则提供了一种脚本语言PigLatin,用于数据流的处理和分析。Spark作为一种......
  • 初识c语言
    什么是c语言c语言是一门计算机编程语言,可广泛用于底层开发。c语言是一种能以简易方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。第一个c语言程序入门第一个c语言代码如下:那么其运行的结果就是打印helloworld,运行结果如下:......
  • 【C语言(谭浩强)】程序设计与 C 语言
    博客主页:小蜗系列专栏:C语言(谭浩强)版关注博主,后期持续更新系列文章如果有错误请大家批评指出,我会及时修改感谢大家点赞......
  • 第四周周报总结
    本周在准备rk,打了几场训练赛然后自己打了几场rk模拟赛,感觉手感还可以然后还打了牛客一场,这道题挺值得补的题解:2022RoboCom世界机器人开发者大赛-本科组(省赛)-whatdo+-博客园(cnblogs.com)2021RoboCom世界机器人开发者大赛-本科组(决赛)-whatdo+-博客园(cnblogs.c......
  • C语言----结构体
    结构体结构体的含义自定义的数据类型它是由很多的数据组合成的一个整体,结构型数据其中的每一个数据,都是结构体的成员书写的位置:函数的里面:局部位置,只能再本函数中使用函数的外面:全局位置,在所有的函数中都可以使用#include<stdio.h>#include<string.h>structm......