最小堆是一棵完全二叉树,其中子节点比父节点具有更高的值(更低的优先级),即从根节点到叶节点的任何路径都具有元素的升序。在二叉树的情况下,根被认为是高度 0,它的子节点被认为是高度 1,依此类推。每个节点最多可以有两个孩子。
最小堆的重要属性:
1. 父节点总是比子节点具有更高的优先级和更小的值(在 Min Heaps 的情况下)。
2. 堆是一棵完整的二叉树。因此,为了填充所述第N级,(N-1)的水平应当被完全填充第一和由左到右节点的N个填充第水平应该发生。
基于这些属性,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).
- 最小堆删除操作复杂度分析
节点的删除不能随机完成。具有最高优先级的元素(即父元素)将首先被删除,然后按优先级顺序删除下一个节点。这就是为什么堆被称为优先队列。
首先,交换父节点和叶子节点的位置,然后将新形成的叶子节点(原来是父节点)从队列中移除。接下来,开始交换过程,以便根据最小堆的属性将新的父节点放置在正确的位置。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).
- 从最小堆中获取最小值的复杂性
为了获得最小值只需返回根节点的值(即最小堆中的最小元素),因此只需返回数组索引 0 处的元素。
Hence, Complexity of getting minimum value is: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。