分别循环两次和在一个循环内循环之间有什么性能差异吗?如何证明或计算?
问问题
106 次
2 回答
1
这完全取决于循环。以下是O(n^2)
运行时间的一些示例:
1) Nested loops to n
for(i from 1 to n){
for(j from 1 to n){
...
}
}
2) Nested loops to n with the inner loop starting from i
for(i from 1 to n){
for(j from i to n){
...
}
}
3) Second loop iterates n^2 times since i == n
for(i from 1 to n){
...
}
for(j from 1 to i*n){
...
}
4) One loop up to n*n/50
for(i from 1 to n*n/50){
...
}
以下是一些O(n)
循环示例:
1) Simple loop
for(i from 1 to n){
...
}
2) Nested loop with constant iterations
for(i from 1 to n){
for(j from 1 to 5){
...
}
}
然后你有一个事实,更好的时间复杂度并不总是足够小n
,比如循环到n*n/50
. If n
is less than 8
(a positive int) 则该循环根本不会迭代,因此它显然比具有 的 Simple 循环更快O(n)
,后者将精确地迭代n
次数。
于 2012-06-12T21:32:54.560 回答
1
通常来说,一般来说:
O(n + m)
如果您有两个不同长度的不同循环(n
和 m
) ,则可能是这样。
for (int i = 0; i < n; i++) {}
for (int i = 0; i < m; i++) {}
可能是O(n * m)
您在循环中循环。
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
}
}
于 2012-06-12T21:35:23.927 回答