两种方法的复杂性

时间:2016-04-08 14:51:28

标签: algorithm complexity-theory asymptotic-complexity

如果我有一个使用以下代码将元素插入堆的方法:

(1)如果数组已满 - 创建一个新数组并按其original.length * 2调整大小,然后将原始数组中的每个元素复制到新数组。

(2)。为了实现一个堆只是percup / perdown每个元素到它的套装位置。

所以最坏的情况是 - (1)是O(n)而(2)是O(logn)

我的问题是这两种复杂性的总和是什么?如何计算该算法的最坏情况复杂度。

谢谢!

2 个答案:

答案 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)