【问题标题】:time complexity of specific nested loop in cc中特定嵌套循环的时间复杂度
【发布时间】:2018-03-12 00:56:31
【问题描述】:

为什么这个函数的时间复杂度是 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");
    }
}

【问题讨论】:

  • 错误在于天真地将两个循环的各个复杂性相乘——请注意,n 在每次执行外循环后都会发生变化。提示:几何系列.
  • 好吧,如果你把无穷级数 n + n/2 + n/4 + n/8 ... 相加,你会得到 2n。

标签: c for-loop time-complexity complexity-theory asymptotic-complexity


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2019-05-18
    相关资源
    最近更新 更多