以下代码的时间复杂度如何为O(n)?

时间:2017-02-14 10:12:02

标签: algorithm time-complexity big-o asymptotic-complexity

我正在使用Interview Bit解决时间复杂度问题,该问题在下面的图片中给出。 enter image description here

这个问题的正确答案是O(N)。但据我说,答案应该是O(NlogN)。由于第一个“for循环”的复杂性应该是O(logN),因为变量i在每次迭代中除以2,我研究过每当循环变量乘以或除以2时,时间复杂度为O (10即)。现在,对于第二个“for循环”,复杂度应该是O(N),因此,最终的复杂度应该是O(N * logN)。

任何人都可以解释我错在哪里吗?

1 个答案:

答案 0 :(得分:3)

做实际数学:

T(N) = N + N/2 + N/4 + ... + 1 (log_2 N terms in the sum)

这是一个比率为1/2的几何系列,因此总和等于:

T(N) = N*[1 - (1/2)^(log_2 N)] / (1 - 1/2) =
     = [N - N/(2^log_2 N)] / 0.5 =
     2^log_2 N = N
     = (N - 1) / 0.5 

所以T(N)O(N)