我只是读了这篇文章,并且想知道是否可以得出结论:无论嵌套循环内的代码是什么,小循环内的大循环必须始终比大循环内的小循环运行得更快?举个例子。
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)时,这意味着DoSomething(i,j)与变量i和j有关联。性能有何不同?
您的问题没有具体答案。决定是否快速的参数是您在循环中所做的事情。例如,假设您要添加2个数组并将它们存储在第三个数组中:
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快得多。原因是缓存。请查看此问题以获取更多详细信息。答案非常有用,在我这里没有必要再解释缓存的概念了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句