插入几个元素后恢复堆属性

时间:2018-11-04 09:51:52

标签: arrays algorithm data-structures heap complexity-theory

让我们有一个二进制堆,它由长度为n的数组实现。我们在该数组的末尾写入k个元素。之后,我们要在长度为n + k的该数组上重新堆属性。

复杂度应为O(k +(logn)* log(log(n)))。

我的举动。当然,我们可以使用标准程序恢复复杂度为O(n + k)的完整数组的堆属性。但这不能满足这种复杂性。

我也听说过以下方法。让我们用O(k)在k个最后一个元素上堆一个,然后我们创建一个“新堆”,其中第一个元素更大(如果我们使用max-heaps),然后是大小为n的第一个堆的顶部和第二个堆的顶部大小为k,第一个堆为新堆的左子堆,第二个堆为右子堆。之后,我们通过O(log(n + k))删除顶部元素。但是当我们使用数组表示形式时,我真的不明白如何实现这种方法。

1 个答案:

答案 0 :(得分:1)

最简单的方法是对第k个新元素中的每一个应用“堆插入”操作。这具有O(k log(n))的复杂度,如果k远小于n,则它的复杂度要优于O(k + log(n)log(log(n)))