【问题标题】:Time complexity in c (nested loop)c中的时间复杂度(嵌套循环)
【发布时间】:2021-12-04 04:01:07
【问题描述】:

我很难弄清楚这两个代码的时间复杂度。

c = 0;
for (i = 0; i < n*n; i++) 
for (j = 0; j < i; j++) 
 c = c + 1; 

在上面的代码中,外循环的时间复杂度为 n^2 ,但在内循环中很难找到。

j = 1; c = 0;
for(i = 1; i <= n; i = i + 1) { 
 for(k = 1; k <= j; k = k + 1) { 
 c = c + 1; 
 } 
j = j * 2; 
}

在第二个代码中,我认为外循环的时间复杂度是 n,内循环是 2^n。 我认为这两个 ((n)*2^n) 的倍数是整个时间复杂度。 这样对吗? 感谢阅读

【问题讨论】:

    标签: c loops nested time-complexity nested-loops


    【解决方案1】:

    在第一个代码中,您从 1 迭代到 n^2。这意味着您的迭代次数为 0, 1, 2, 3, ........n*n - 1。这个系列在 AP。

     Sum of series in AP = N(N+1)/2 = n^2(n^2+1)/2
     Time Complexity is O(n^4)
    

    在第二个代码中,您从 1 迭代到 n。因此,内部循环将相应地迭代 1、2、4、...2^n。这个系列在GP中

     Sum of series in GP = a(r^n-1)/r-1 = 2^n
     Time complexity is O(2^n)
    

    【讨论】:

    • 你能解释一下第二个代码的时间复杂度吗?
    • 我认为它应该是 O(n*2^n) 因为第一个循环
    • 当i=1时,内循环运行1次,i=2内循环=2,i=3内循环=4,以此类推i=n内循环=2^n .如果您观察我们正在使用 i 并获取每个内部循环的迭代。因此,无需添加外循环值。
    【解决方案2】:

    第一个有 O(n^4),因为 (n*n)^2。第二个有 O(n * 2n)=O(n^2)。

    【讨论】:

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