我只需要对这个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
}
}
答案 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次运行次数