什么是buildHeap的Big-O运行时?

问题描述

我在尝试找到Big-O运行时遇到问题。它通过调用insert函数将元素插入到堆中来构建堆。

buildHeap(A)
 h = new empty heap
for each element e in A
h.insert(e)

此版本的buildHeap的Big-O运行时是什么?

解决方法

这样写,对于典型的二进制堆,它将是O(n log n);您一次插入一个,每次插入为O(log n)。有优化的方法可以在n的时间内从O(n)个元素一次构建一个所有元素数组的堆(称为“堆”操作),但是不能通过重复的单元素插入来完成

big-O可能会根据堆的类型而变化; some variant heap designs have O(1) insertion,当然还有其他因类型而异的折衷方案,例如内存碎片,实现的复杂性,每次操作的固定成本较高等。