最小堆是完整的二叉树,其中子节点的值比父节点的值高(优先级低),即,从根到叶节点的任何路径都具有元素的升序。如果是二叉树,则将根视为高度为0,将其子节点视为高度为1,依此类推。每个节点最多可以有两个孩子。
最小堆的重要属性:
1.父节点将始终具有比子节点更高的优先级和更低的值(在最小堆的情况下)。
2.堆是完整的二叉树。因此,为了填充第N个级别,应该首先完全填充(N-1)个级别,并且第N个级别中的节点填充应从左到右进行。
基于这些属性,Min Heap的各种操作如下:
- 最小堆中插入操作的复杂性分析
当应该将节点添加到堆中时,将在数组的下一个空索引处添加元素。然后检查插入的子节点是否与父节点一致。如果子级的值(比优先级高)比父级低,则完成节点的交换。交换过程一直进行到满足Min Heap的属性为止。
If a node is to be inserted at a level of height H:
Complexity of adding a node is: O(1)
Complexity of swapping the nodes(upheapify): O(H)
(swapping will be done H times in the worst case scenario)Total complexity: O(1) + O(H) = O(H)
For a Complete Binary tree, its height H = O(log N), where N represents total no. of nodes.
Therefore, Overall Complexity of insert operation is O(log N).
- 最小堆中删除操作的复杂度分析
节点的删除不能随机完成。优先级最高的元素(即父级)将首先被删除,然后按照优先级顺序删除下一个节点。这就是为什么堆被称为优先级队列的原因。
首先,交换父节点和叶节点的位置,然后从队列中删除新形成的叶节点(最初是父节点)。接下来,开始交换过程,以便根据Min Heap的属性将新的父节点放置在正确的位置。If a node is to be deleted from a heap with height H:
Complexity of swapping parent node and leaf node is: O(1)
Complexity of swapping the nodes(downheapify): O(H)
(swapping will be done H times in the worst case scenario)Total complexity: O(1) + O(H) = O(H)
For a Complete Binary tree, its height H = O(log N), where N represents total no. of nodes.
Therefore, Overall Complexity of delete operation is O(log N).
- 从最小堆中获取最小值的复杂性
为了获得最小值,只需返回根节点的值(这是Min Heap中的最小元素),因此只需返回数组索引0处的元素即可。
Hence, Complexity of getting minimum value is: O(1)