问题描述
我在尝试找到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,当然还有其他因类型而异的折衷方案,例如内存碎片,实现的复杂性,每次操作的固定成本较高等。