堆是一种特殊的基于树的数据结构,其中树是完整的二叉树。由于堆是完整的二叉树,因此具有N个节点的堆的日志高度为N。删除最高或最低优先级的元素很有用。它通常表示为数组。数据结构中有两种堆。
最小堆
在最小堆中,根节点上存在的密钥必须小于或等于其所有子节点上存在的密钥。对于该二叉树中的所有子树,相同的属性必须递归地为true。在最小堆中,根中存在的最小关键元素。下面是满足Min Heap所有属性的二叉树。
最大堆
在最大堆中,根节点上存在的密钥必须大于或等于其所有子节点上存在的密钥。对于该二叉树中的所有子树,相同的属性必须递归地为true。在最大堆中,根目录中存在的最大关键元素。下面是满足Min Heap所有属性的二叉树。
最小堆和最大堆之间的区别
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. |
堆的应用:
- 堆排序:堆排序是使用Binary Heap在O(N * log N)时间对数组进行排序的最佳排序算法之一。
- 优先级队列:优先级队列可以通过使用堆来实现,因为它支持O(log N)时间内的insert() , delete() , extractMax() , reduceKey()操作。
- 图算法:堆特别用在图算法中,例如Dijkstra的最短路径和Prim的最小生成树。
最小堆和最大堆的性能分析:
- 获取最大或最小元素:O(1)
- 将元素插入最大堆或最小堆:O(log N)
- 删除最大或最小元素:O(log N)
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。