我正在学习堆数据结构,并且对标题中提到的堆函数感到非常困惑。
根据我的理解,max heapify的算法看起来非常类似于使用自顶向下的方法构建堆。甚至堆排序类似于堆的自顶向下构造,只是在每次迭代时将第一个元素推送到数组的末尾。
另外,我想知道在这些函数中,我们处理的是实际的二叉树还是数组?或者我们只是用一个数组来表示一个二叉树,然后重新排列它的元素?
发布于 2021-11-19 13:05:09
PriorityQueue是一种抽象数据类型,其中每个元素都有一个与之关联的优先级。许多数据结构都实现了PriorityQueue。堆就是其中之一。我们可以根据需要使用它们。Min-Heap将高优先级给予最小元素,而Max-Heap将高优先级给予最大元素。
还有,我想知道在这些函数中,我们是在处理实际的二叉树还是数组?或者我们只是用一个数组来表示一个二叉树,然后重新排列它的元素?
堆基于二叉树结构,可以使用数组轻松地实现。您也可以使用实际的二叉树来实现这一点。
Heapify是在将元素插入或移除到堆中时涉及的操作。当我们将一个元素插入到堆中时,我们将它插入到数组的末尾,并执行HeapifyUp,这会将插入的元素冒泡到正确的位置。当从顶部(开始)删除元素时,我们从数组中取出最后一个元素并将其插入开始处,然后向下冒泡(HeapifyDown)该元素,直到它到达正确的位置。
This是一篇很好读的文章。
发布于 2022-02-19 12:05:01
堆的定义:堆是一个完全的二叉树,它满足父节点值大于子节点值(在最大堆的情况下)或小于子节点的值(在最小堆的情况下)的属性。Heap的这个属性必须跟在每个节点后面,并且它的子节点在树的每个级别上。
存储在内存中:二叉树以数组的形式作为数据结构存储在内存中,遵循对元素排序的级别遍历,使得对于作为父级的每个索引i,子级将是2_i+1和2_i+2
堆(构造堆)是一种方法(自上而下或自下而上),它将元素排列在任何数组中,以便当检查任何索引i作为父级时,索引2_i+1和2_i+2处的子节点值将遵循最大堆或最小堆属性。它不会按升序或降序对数组进行排序。
堆排序:升序或降序排序数组。顾名思义,我们在这里使用Heap BT属性来重新排列数组元素。堆排序是堆BT的一个应用。
通过Heap-:对输入数组进行排序的步骤
https://stackoverflow.com/questions/70025649
复制相似问题