有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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) 个答案