分别循环两次和循环内循环之间的性能

时间:2012-06-12 21:23:50

标签: performance loops

在循环中循环两次和在循环内循环之间是否有任何性能差异? 如何证明或计算?

2 个答案:

答案 0 :(得分: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的循环一样。如果n小于8(正整数),则该循环根本不会迭代,因此它显然会比具有O(n)的简单循环更快,这将迭代完全n次。

答案 1 :(得分: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++) {
   }
}