堆是一种特殊的基于树的数据结构,其中树是一棵完整的二叉树。由于堆是一棵完全二叉树,具有N 个节点的堆具有 log N高度。删除最高或最低优先级元素很有用。它通常表示为一个数组。数据结构中有两种类型的堆。
最小堆
在最小堆中,存在于根节点的键必须小于或等于其所有子节点的键。对于该二叉树中的所有子树,相同的属性必须递归为真。在最小堆中,存在于根处的最小关键元素。下面是满足最小堆所有性质的二叉树。
最大堆
在最大堆中,存在于根节点的键必须大于或等于其所有子节点的键。对于该二叉树中的所有子树,相同的属性必须递归为真。在最大堆中,存在于根处的最大关键元素。下面是满足最大堆所有性质的二叉树。
最小堆和最大堆的区别
Min Heap | Max Heap | |
---|---|---|
1. | In a Min-Heap the key present at the root node must be less than or equal to among the keys present at all of its children. | In a Max-Heap the key present at the root node must be greater than or equal to among the keys present at all of its children. |
2. | In a Min-Heap the minimum key element present at the root. | In a Max-Heap the maximum key element present at the root. |
3. | A Min-Heap uses the ascending priority. | A Max-Heap uses the descending priority. |
4. | In the construction of a Min-Heap, the smallest element has priority. | In the construction of a Max-Heap, the largest element has priority. |
5. | In a Min-Heap, the smallest element is the first to be popped from the heap. | In a Max-Heap, the largest element is the first to be popped from the heap. |
堆的应用:
- 堆排序:堆排序是最好的排序算法之一,它使用二叉堆在O(N*log N)时间内对数组进行排序。
- 优先队列:优先队列可以使用堆来实现,因为它支持O(log N)时间内的insert() 、 delete() 、 extractMax() 、 reduceKey()操作。
- 图算法:堆特别用于图算法,如 Dijkstra 的最短路径和 Prim 的最小生成树。
Min-Heap 和 Max-Heap 的性能分析:
- 获取最大或最小元素:O(1)
- 将元素插入最大堆或最小堆:O(log N)
- 删除最大或最小元素:O(log N)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。