如果我有一个使用以下代码将元素插入堆的方法:
(1)如果数组已满 - 创建一个新数组并按其original.length * 2
调整大小,然后将原始数组中的每个元素复制到新数组。
(2)。为了实现一个堆只是percup / perdown每个元素到它的套装位置。
所以最坏的情况是 - (1)是O(n)
而(2)是O(logn)
我的问题是这两种复杂性的总和是什么?如何计算该算法的最坏情况复杂度。
谢谢!
答案 0 :(得分:0)
对于这样的情况,如果您遵循教科书方法,算法的最坏情况复杂性将是
= O(n) + O(logn)
= O(n)
因此,复杂性将是O(n)
实际上,最坏情况复杂性这个名称可以为您提供答案。你应该问自己这个问题,
是否存在复杂性为O(n)
的情况。
如果是,那就是最坏情况复杂性
答案 1 :(得分:0)
如果要逐个插入N个元素,则每次执行siftUp/siftDown
进程,专用于这些过程的时间为O(NlogN)(作为log1+log2+...log(N-1)+log(N)
的总和)
但阵列扩展很少发生。最后一次扩展需要N步,前N / 2步,依此类推。专用于这些程序的时间是
N + N/2 + N/4 + ...+1 = N*(1 + 1/2 +1/4+...) = N*2 = O(N)
摊销扩展部分的时间为 O(1),插入部分的摊销时间为 O(logN)
N元素的整体复杂性为
O(N)+ O(NlogN)= O(NlogN)
或
每个元素O(logN)