如果我们在空的最小堆上进行n
个任意插入和删除操作(给定删除位置在最小堆中),为什么插入的平摊分析是O(1)
,而删除是O(log n)
?
a) insert O(log n), delete O(1)
b) insert O(log n), delete O(log n)
c) insert O(1), delete O(1)
d) insert O(1), delete O(log n)
有人能为我澄清这个问题吗?(涉及IT技术)
如果我们在空的最小堆上进行n
个任意插入和删除操作(给定删除位置在最小堆中),为什么插入的平摊分析是O(1)
,而删除是O(log n)
?
a) insert O(log n), delete O(1)
b) insert O(log n), delete O(log n)
c) insert O(1), delete O(1)
d) insert O(1), delete O(log n)
事实证明,平均情况下插入二叉堆所需的时间远远小于O(log n)。很可能更接近于O(1)。而从二叉堆中删除则更接近于最坏情况的O(log n)。
O(lg n)
,因为每次插入都需要进行“重构”或者叫“上浮操作”,无论你如何称呼它,其本身的时间复杂度就是O(lg n)
。参考链接:http://en.wikipedia.org/wiki/Binary_heap#Insert - Jason Hu