【发布时间】:2012-09-12 23:15:18
【问题描述】:
我似乎理解了更简单循环的基本概念......第一个循环在 O(n) 中运行,内部循环也是如此。因为它们都是嵌套的,所以乘以得到 O(n^2) 的总运行时间。
sum = 0;
for ( i = 0; i < n; i++ )
for j = 0; j < n; j++ )
++sum;
虽然当事情开始发生转变时,我完全不知道如何解决这个问题。有人可以向我解释如何计算以下两项的运行时间吗?此外,任何可以进一步帮助我改进的易于理解的参考资料的链接也值得赞赏。谢谢!
sum = 0;
for( i = 0; i < n; i += 2 )
for( j = 0; j < n; j++ )
++sum;
我能从中收集到的唯一信息是内循环在 O(n) 中运行。 i+=2 真的让我陷入了外循环。
sum = 0;
for( i = 1; i < n; i *= 2 )
for( j = 0; j < n; j++ )
++sum;
根据我的尝试...外循环是 O(log(n)),内循环是 O(n),所以总是 O(n log(n))?
【问题讨论】:
-
提示:
+= 2表示它的迭代次数是++的一半。 -
所以这意味着外循环运行时间为 O(n/2)?
-
是的,外部循环需要 n/2,但请记住,我们对非常大量的 n 感兴趣,所以就像 2n 会变成 O(n) n/2 会变成 O(n)。
-
哦,对了!常量被丢弃。所以外部 O(n) 和内部 O(n) 的总运行时间为 O(n^2),对吗?
标签: performance big-o