【什么是堆】
概念:堆是一种特殊的二叉树,具备以下两种性质
1)每个节点的值都大于(或者都小于,称为最小堆)其子节点的值
2)树是完全平衡的,并且最后一层的树叶都在最左边
这样就定义了一个最大堆。如下图用一个数组来表示堆:
那么下面介绍二叉堆:二叉堆是一种完全二叉树,其任意子树的左右节点(如果有的话)的键值一定比根节点大,上图其实就是一个二叉堆。
你一定发觉了,最小的一个元素就是数组第一个元素,那么二叉堆这种有序队列如何入队呢?看图:
假设要在这个二叉堆里入队一个单元,键值为2,那只需在数组末尾加入这个元素,然后尽可能把这个元素往上挪,直到挪不动,经过了这种复杂度为Ο(logn)的操作,二叉堆还是二叉堆。
那如何出队呢?也不难,看图:
出队一定是出数组的第一个元素,这么来第一个元素以前的位置就成了空位,我们需要把这个空位挪至叶子节点,然后把数组最后一个元素插入这个空位,把这个“空位”尽量往上挪。这种操作的复杂度也是Ο(logn)。
【适用范围】
海量数据前n大,并且n比较小,堆可以放入内存
【基本原理及要点】
最
大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元
素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。
【扩展】
双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。
【问题实例】
1)100w个数中找最大的前100个数。
用一个100个元素大小的最小堆即可。
相关推荐
第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: ...
堆的出队,删除,插入节点(下筛法,上滤法),子树更新,节点修改,堆排序,堆的创建,销毁。
钢铁侠-核反应堆-html+css
6个重要的NET概念:栈-堆-值类型-引用类型-装箱-拆箱.doc
--- epicsnowman.zipHTML5小游戏【堆雪人-优秀H5小游戏合集】游戏源码分享下载 --- epicsnowman.zipHTML5小游戏【堆雪人-优秀H5小游戏合集】游戏源码分享下载 --- epicsnowman.zipHTML5小游戏【堆雪人-优秀H5小游戏...
行业资料-交通装置-一种基于压电叠堆-液压微位移放大的船艇推进轴系纵向振动控制装置.zip
堆是一种特殊的数据结构,它与进程虚拟内存空间中的堆不同,虽然名字相同,但功能和概念完全不同。在数据结构中,堆通常是一个完全二叉树的抽象表示,具有以下两个关键特性: 1. **完全二叉树**:堆必须是一棵完全...
堆排序----堆与堆排序10-从堆的定义可以看出,堆实质是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点
在IT网络环境中,核心交换机的堆叠是提高网络性能和冗余的重要手段。本文将详细阐述如何在现网环境中,特别是在不影响业务运行的情况下,配置H3C S6520系列交换机的IRF2(Intelligent Resilient Framework 2)堆叠。...
堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆通常被理解为一个完全二叉树,其中每个父节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。堆排序分为...
堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法-...
c语言实现堆排序。代码实现的是建立大根堆
String3.1-java堆和栈---马克-to-win java视频 马克Java社区 马克towin
蒟蒻 OIer 的免费二叉堆模板
4. **堆管理**:还包括HeapCreate()和HeapDestroy()等函数,用于创建和销毁堆,以及HeapValidate()等用于检查堆是否正确的函数。 当系统提示丢失api-ms-win-core-heap-l2-1-0.dll时,可能是由于以下原因: - **...
《api-ms-win-core-heap-l2-1-0.dll:操作系统核心堆管理库解析》 在Windows操作系统中,`api-ms-win-core-heap-l2-1-0.dll`是一个至关重要的动态链接库文件,它是系统核心堆管理的一部分,用于32位和64位系统。该...
堆排序-flash演示 可自己输入数据............
第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01第5节: 堆、栈方法执行-01...
二叉堆,也称为堆数据结构,是一种特殊的树形数据结构,它满足特定的属性:在二叉堆中,每个节点的值要么大于或等于其子节点(最大堆),要么小于或等于其子节点(最小堆)。这个特性使得二叉堆在处理与优先级相关的...