小循环中的大循环总是比大循环中的小循环快吗?
我刚刚读了this post,不知道我们是否可以得出结论,无论代码在嵌套循环中做什么,小循环中的大循环必须总是比大循环中的小循环运行得更快?举个例子。
int m, n;
m = 1000000;
n = 10;
代码段A
for (int i = 0; i < n; i++)
for (int j=0; j < m; j++)
{
DoSomething();
}
代码段B
for (int j = 0; j < m; j++)
for (int i=0; i < n; i++)
{
DoSomething();
}
我们可以说,无论DoSomething()实际上做什么,代码段A总是比代码段B运行得更快?
正如@Stackmate所指出的,我想将这个问题扩展为两个
当嵌套循环内的代码为DoSomething()时,这意味着 DoSomething()与变量i和j无关。 性能差异?
当嵌套循环内的代码为DoSomething(i,j)时,这意味着 某件事(i,j)与变量i和j有关。性能差异是什么?
解决方案
您的问题没有特定的答案。 决定它是否快的参数是您在循环中所做的事情。 例如,假设您要添加两个数组并将它们存储在第三个数组中:
Code 1:
for(int i = 0; i < 1000; i++)
{
for(int j = 0; j < 1000000; j++)
C[i][j] = A[i][j] + B[i][j];
}
Code 2:
for(int i = 0; i < 1000000; i++)
{
for(int j = 0; j < 1000; j++)
C[j][i] = A[j][i] + B[j][i];
}
代码1将比代码2快得多。 原因是缓存。 有关更多详细信息,请查看this问题。这些答案信息量非常大,我在这里再次解释缓存的概念没有意义。
相关文章