具有错误条件的for循环的大O.

时间:2016-10-15 02:19:19

标签: java big-o

我只需要对这个Big O问题做一些澄清或帮助。我不知道我是否正确解释了这一点,但我注意到for循环有一个错误的条件,所以这意味着它根本不会循环。我的教授说,仍然可以确定循环的运行时间。所以我想的是:

1 + (n - 1 - n) * (n) = 1 + 1 * n = 1 + n = O(n)

说明:1表示循环外的操作。 (n - 1 - n)是外循环的迭代,n是内循环的迭代。

注意:我还在学习Big O,所以如果我的逻辑错误,请纠正我。

int total = 0;
for (int i = n; i < n - 1; i++) {
    for (int j = 0; j < n; j++) {
        total = total + 1
    }
}

2 个答案:

答案 0 :(得分:2)

Big O分析中不应有任何负数。负运行时间没有意义。此外,(n - 1 - n)不仅仅是O(1)的顺序。你的外部循环甚至不会进入一次迭代。因此,循环中任何语句的时间复杂度都无关紧要。

总之,运行时间为1 + 1 = O(1)

答案 1 :(得分:0)

用于描述函数的渐近行为的大O表示法。基本上,它告诉你函数增长的速度有多快 下降

例如,在分析某些算法时,可能会发现完成大小为n的问题所需的时间(或步数)由

给出
  

T(n)= 4 n ^ 2 - 2 n + 2

如果我们忽略常量(这是有道理的,因为那些取决于程序运行的特定硬件)和增长较慢的术语,我们可以说&#34; T(n)&#34;生长在n ^ 2和#34;并写:T(n)= O(n ^ 2)

对于形式定义,假设f(x)和g(x)是在实数的某个子集上定义的两个函数。我们写了

  

f(x)= O(g(x))

(或f(x)= O(g(x))对于x - >无穷大更精确)当且仅当存在常数N和C时

  

| F(X)| &lt; = C | g(x)|对于所有x> N

直观地说,这意味着f的增长速度不会比g

如果a是某个实数,我们写

  对于x-> a

f(x)= O(g(x))

当且仅当存在常数d> 0和C这样

  

| F(X)| &lt; = C | g(x)|对于所有x与| x-a | &LT; d

因此对于你的情况,它将是O(n ^ 2)| f(x)| &GT; Ç| G(X)|

来自http://web.mit.edu/16.070/www/lecture/big_o.pdf

的参考资料
int total = 0;
for (int i = n; i < n - 1; i++) { // --> n loop
    for (int j = 0; j < n; j++) { // --> n loop
        total = total + 1; // -- 1 time 
    }
}

}

Big O Notation给出一个假设,当值非常大时外循环将运行n次并且内循环运行n次

假设n - &gt; 100 总数n ^ 2 10000次运行次数