Algorithm 两种方法的复杂性

Algorithm 两种方法的复杂性,algorithm,complexity-theory,asymptotic-complexity,Algorithm,Complexity Theory,Asymptotic Complexity,如果我有一个方法,可以使用以下代码将元素插入堆: (1) 如果数组已满-创建一个新数组并按其original.length*2调整大小,然后将每个元素从原始数组复制到新数组 (2) 。为了完成一个堆,只需将每个元素上下移动到合适的位置 因此,最坏情况的复杂性是:(1)isO(n)和(2)itsO(logn) 我的问题是这两种复杂性的总和是什么?如何计算该算法的最坏情况复杂度 谢谢 对于这种情况,如果您遵循教科书方法,算法的最坏情况复杂性将是 = O(n) + O(logn) = O(n) 因此

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

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

(2) 。为了完成一个堆,只需将每个元素上下移动到合适的位置

因此,最坏情况的复杂性是:(1)is
O(n)
和(2)its
O(logn)

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


谢谢

对于这种情况,如果您遵循教科书方法,算法的最坏情况复杂性将是

= O(n) + O(logn)
= O(n)
因此,复杂性将是
O(n)


实际上,名称最坏情况复杂性给出了答案。你应该问自己这个问题

是否存在复杂性为
O(n)
的情况


如果是,那么这就是最坏情况的复杂性

如果您一个接一个地插入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)每个元素

@BarakMi,从任何算法书籍中了解时间复杂性,你都会发现这个概念。