在循环中循环两次和在循环内循环之间是否有任何性能差异? 如何证明或计算?
答案 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++) {
}
}