[英]Find the time complexity of a given function
对于给定的程序,时间复杂度将是多少。
int count = 0;
for(int i = n; i > 0; i /= 2)
{
for(int j = 0; j < i; j++)
{
count++;
}
}
根据我的理解,它应该是O(nlogn)
因为i
循环是分而治之的,因此O(logn)
和j
循环是O(n)
。
但是,正确的答案是O(n)
。 有人可以解释原因吗?
这是O(n)
:
外循环具有O(logn)
迭代,因为i
从n
开始并且在每次迭代时减半。
现在让我们考虑内循环的迭代次数:
n
次迭代(因为i==n
)。 在外循环的第二次迭代中,内循环具有n
/ 2次迭代(因为i==n/2
)。
...
在外循环的log(n)
'(和最后)迭代中,内循环有1次迭代(因为i==1
)。
总结我们得到的所有内循环迭代:
n + n/2 + n/4 + ... + 1 <= 2*n = O(n)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.