【问题标题】:Time Complexity of an Algorithm (Nested Loops)算法的时间复杂度(嵌套循环)
【发布时间】:2016-01-15 01:08:20
【问题描述】:

我试图找出这个伪代码给定算法的时间复杂度:

sum = 0;
for (i = 1; i <= n; i++)
    for (j = 1; j <= n / 6; j++)
        sum = sum + 1;

我知道第一行运行

n 次

但我不确定第二行。

【问题讨论】:

  • 时间复杂度 = sum ? :) (n*n/6)
  • 这不是 O(n^2) 吗?看起来很简单。
  • 它并不总是很难:)
  • 好吧,如果我理解正确的话,如果第二个循环是 j=1 到 n/i,那么得到的复杂度会是 (n*n/i) 还是 O(n^ 2)?
  • 是的@Aede,你检查答案了吗,他们解释了。 :)

标签: c algorithm big-o time-complexity complexity-theory


【解决方案1】:

使用 Sigma 符号,我们可以找到您的算法的渐近界,如下所示:

【讨论】:

    【解决方案2】:

    这里有一个简单的双循环:

    for i=1;i<=n;i++
       for j=1; j<=n/6; j++
    

    所以如果你计算循环体将被执行多少次(即这行代码sum = sum + 1; 将被执行多少次),你会看到:

    n*n/6 = n²/6

    就大 O 表示法而言是:

    O(n²)

    因为我们并不真正关心常数项,因为随着n 的增长,常数项是否存在并没有(大)区别!


    当并且只有当你完全明白我在说什么时,你可以用这个好问题更深入:Big O, how do you calculate/approximate it?


    但是,请注意此类问题更适合Theoretical Computer Science,而不是 SO。

    【讨论】:

      【解决方案3】:

      您进行 n*n/6 次操作,因此,时间复杂度为 O(n^2/6) = O(n^2)。

      【讨论】:

      • 更准确地说,n * (n / 6) 操作:复杂度相同,但结果不同。
      猜你喜欢
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多