i = 1;
while (i <= n)
j = i;
x = x+A[i];
while (j > 0)
y = x/(2*j);
j = j/2; // Assume here that this returns the floor of the quotient
i = 2*i;
return y;
我不确定我的答案,我得到O(n 2 )。
答案 0 :(得分:1)
允许删除x
和y
变量,因为它不会影响复杂性。
i = 1;
while (i <= n)
j = i;
while (j > 0)
j = j/2;
i = 2*i;
j
除以2,实际上它不是O(logn)
的衬里。例如,当j
为16时,您将执行5 ( O(log16)+1 )
步骤:8,4,2,1,0。i
乘以2,因此它也是O(logn)
。因此总体复杂度为O(logn * logn)
。