📜  二元最小堆的各种运算的复杂性分析

📅  最后修改于: 2021-05-08 17:08:39             🧑  作者: Mango

最小堆是完整的二叉树,其中子节点比父节点具有更高的值(更低的优先级),即,从根到叶节点的任何路径都具有元素的升序。如果是二叉树,则将根视为高度为0,将其子节点视为高度为1,依此类推。每个节点最多可以有两个孩子。

最小堆的重要属性:
1.父节点将始终具有比子节点更高的优先级和更低的值(在最小堆的情况下)。
2.堆是完整的二叉树。因此,为了填充第N级别,应该首先完全填充(N-1)个级别,并且第N个级别中的节点填充应从左到右进行。

基于这些属性,Min Heap的各种操作如下:

  1. 最小堆中插入操作的复杂性分析
    当应该将节点添加到堆中时,将在数组的下一个空索引处添加元素。然后检查插入的子节点是否与父节点一致。如果子级的值(比优先级高)比父级低,则完成节点的交换。交换过程一直进行到满足Min Heap的属性为止。
  2. 最小堆中删除操作的复杂度分析

    节点的删除不能随机完成。优先级最高的元素(即父级)将先被删除,然后按照优先级顺序删除下一个节点。这就是为什么堆被称为优先级队列的原因。
    首先,交换父节点和叶节点的位置,然后从队列中删除新形成的叶节点(最初是父节点)。接下来,开始交换过程,以便根据Min Heap的属性将新的父节点放置在正确的位置。

  3. 从最小堆中获取最小值的复杂性

    为了获得最小值,只需返回根节点的值(这是Min Heap中的最小元素),因此只需返回数组索引0处的元素即可。