繁体   English   中英

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

[英]How the time complexity of the following code is O(n)?

我正在解决有关采访位的时间复杂性问题,该问题在下面的图片中给出。 在此处输入图片说明

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

谁能解释我错了吗?

做实际的数学运算:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM