内存堆与最小/最大堆数据结构



我读过应用程序的内存分配,我知道,对于给定的应用程序,内存中的堆或多或少是在启动时动态分配的。然而,还有另一个概念称为最小堆,它是一种以树的形式组织的数据结构,其中每个父节点都小于或等于其子节点。

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

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

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

  1. 最小堆
  2. 最大堆

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

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

最新更新