在JAVA中,性能循环两次,但成本相同
我有一个这样的循环:
double[][] ED = new double[n][m];
for(int k = 0; k < 20000; k++)
for (int i = 0; i < 200; i++)
for (int j = 0; j < 200; j++)
ED[i][j] = dis(qx[k][i], qy[k][i], dx[k][j], dy[k][j]);
“dis”是计算(x1,y1)和(x2,y2)之间距离的函数。别介意。问题是当我在循环中添加另一个布尔赋值时,就像这样:
double[][] ED = new double[n][m];
boolean[][] bool = new boolean[n][m];
for(int k = 0; k < 20000; k++)
for (int i = 0; i < 200; i++)
for (int j = 0; j < 200; j++)
{
ED[i][j] = dis(qx[k][i], qy[k][i], dx[k][j], dy[k][j]);
bool[i][j] = ED[i][j] > 5000;
}
新回路的成本比第一个回路高1.5倍。我觉得太贵了。为了进行测试,我将2个赋值分解为2个循环。奇怪的事情发生了,两种时间成本是一样的。有时,代码3比代码2花费的时间更少
double[][] ED = new double[n][m];
boolean[][] bool = new boolean[n][m];
for(int k = 0; k < 20000; k++)
{
for (int i = 0; i < 200; i++)
for (int j = 0; j < 200; j++)
{
ED[i][j] = dis(qx[k][i], qy[k][i], dx[k][j], dy[k][j]);
}
for (int i = 0; i < 200; i++)
for (int j = 0; j < 200; j++)
{
bool[i][j] = ED[i][j] > 5000;
}
}
我的目标是用更少的时间来计算bool[i][j],我该怎么做
共 (0) 个答案