标签: c for-loop time-complexity complexity-theory asymptotic-complexity
为什么这个函数的时间复杂度是T(n)= O(n)而不是T(n)= O(n * log(n))?我认为这个问题的答案在于第一个循环。第一个循环的时间复杂度是不是log(n)?
void f(int n) { for( ; n>0; n/=2 ){ int i; for (i=0; i<n; i++) printf("Hey"); } }
答案 0 :(得分:0)
考虑第一个循环更改n的值。它在每次迭代中将n除以2,表明第一个循环运行log(n)步。我们可以用这种方式重写它:for (int k = 1; k <= n; k *= 2)。第二个循环运行到k。所以我们有
n
2
log(n)
for (int k = 1; k <= n; k *= 2)
k