📜  DAA-插入方法

📅  最后修改于: 2021-01-12 03:38:15             🧑  作者: Mango


要在堆中插入一个元素,新元素最初会作为数组的最后一个元素附加到堆的末尾。

插入此元素之后,可能会违反堆属性,因此可以通过将添加的元素与其父元素进行比较,并将添加的元素上移一个级别,与父元素交换位置来修复堆属性。这个过程称为渗滤上升

重复比较直到父对象大于或等于渗滤元素。

Algorithm: Max-Heap-Insert (numbers[], key) 
heapsize = heapsize + 1 
numbers[heapsize] = -∞ 
i = heapsize 
numbers[i] = key 
while i > 1 and numbers[Parent(numbers[], i)] < numbers[i] 
   exchange(numbers[i], numbers[Parent(numbers[], i)]) 
   i = Parent (numbers[], i) 

分析

最初,在数组的末尾添加了一个元素。如果违反了heap属性,则将元素与其父元素交换。树的高度为log n 。需要执行的最大登录次数。

因此,该函数的复杂度为O(log n)

让我们考虑一个最大堆,如下所示,其中需要添加一个新元素5。

新元素

最初,将在此数组的末尾添加55。

数组

插入后,它违反了heap属性。因此,该元素需要与其父元素交换。交换之后,堆如下所示。

交换

同样,该元素违反了堆的属性。因此,它将与其父级交换。

交换

现在,我们必须停止。