c中特定嵌套循环的时间复杂度

时间:2018-03-12 00:56:31

标签: 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");
    }
}

1 个答案:

答案 0 :(得分:0)

考虑第一个循环更改n的值。它在每次迭代中将n除以2,表明第一个循环运行log(n)步。我们可以用这种方式重写它:for (int k = 1; k <= n; k *= 2)。第二个循环运行到k。所以我们有