如何解决内循环为 j < i 的嵌套循环的时间复杂度是多少?
test = 0;
for( i = 0; i < n; ++i )
for(j = 0; j < i; ++j )
test++;
我的问题是计算内部循环的成本。由于它会在小于 i 时运行,因此我猜测该内部循环的最差运行时间将是 O(i),它本质上是 O(n),那么总体上将是 O(n^2)?
解决方法
整个代码的复杂度为 O(n^2)。
更具体地说,test++
将执行大约 (n-1)*n/2 次。但这仍然被称为“O(n^2)”或“二次”。
Big-O 忽略任何常数乘数——在本例中为 1/2。
此外,它会忽略任何较小的组件。注意 (n-1)n/2 = (nn - n)/2。因此使用 n*n
而忽略 n
。
那段特定的代码不是很实用——for
循环将比 ++
花费更长的时间。此外,一个好的优化器可能会找到一些优化它的方法。
您说的是“最糟糕的运行时间”。那不是真的有效。可能是“最坏的”很少发生。也就是说,在其他情况下,您可能最终只得到 O(n log n)。
思考这个问题的另一种方式:O(n^2) 意味着将 n 加倍将大约使执行时间增加四倍。
,这就像O(n^2)
。
您的总进程数等于 n*(n-1)/2
而不是 n*n
,后者与 O(n^2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。