内存堆与 Min/Max 堆数据结构

Memory Heap vs. Min/Max Heap Data Structure

我已经阅读了有关应用程序的内存分配的信息,并且我了解到,给定应用程序的内存中的堆或多或少是在启动时动态分配的。然而,还有另一个概念叫做最小堆,它是一种以树的形式组织的数据结构,其中每个父节点小于或等于其子节点。

所以,我的问题是:在启动时为给定应用程序分配的堆与包含通常称为 'heapify' 等函数的最小堆数据结构之间有什么关系?是否存在任何关系,或者最小堆数据结构更像是一个更高级别的编程概念?如果没有关系,是否有任何理由让他们被赋予相同的名字?

这对某些人来说似乎是一个愚蠢的问题,但它实际上在工作中引起了争论。

堆是一种数据结构,它实际上是一个具有一些额外属性的完整二叉树。 有两种类型的堆:

  1. 最小堆
  2. 最大堆

在最小堆中,根在树中具有最低值,当您弹出根时,下一个最低的元素出现在顶部。要将树转换为堆,我们使用 heapify 算法。 它在 C++ 中也被称为优先级队列。通常作为一个有竞争力的程序员,我们对堆使用 STL 函数,这样我们就不必从头开始创建堆。 最大堆正好相反,最大堆在根部。 通常使用堆,因为它具有 O(logN) 时间复杂度用于删除和插入元素,因此甚至可以在 10^6 这样的严格约束下工作。

现在我可以理解你对内存中的堆和堆数据结构的混淆,但它们是完全不同的东西。数据结构中的堆只是一种存储数据的方式。