Algorithm 两种方法的复杂性
如果我有一个方法,可以使用以下代码将元素插入堆: (1) 如果数组已满-创建一个新数组并按其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) 因此
original.length*2
调整大小,然后将每个元素从原始数组复制到新数组
(2) 。为了完成一个堆,只需将每个元素上下移动到合适的位置
因此,最坏情况的复杂性是:(1)isO(n)
和(2)itsO(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,从任何算法书籍中了解时间复杂性,你都会发现这个概念。