gpt4 book ai didi

java - 在循环中添加作业但在 JAVA 中花费额外 50% 的时间

转载 作者:行者123 更新时间:2023-12-02 12:42:54 24 4
gpt4 key购买 nike

我有一个这样的循环( q = 20000 , m = n = 200 ,实际上不同k有不同的 qx 数组, qy , dx , dy 。但我没有在这里发布所有代码):

double[][] ED = new double[n][m];
for(int k = 0; k < q; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
ED[i][j] = dis(qx[i], qy[i], dx[j], dy[j]);

此循环成本约为 5s .

“dis”是计算 (x1,y1) 之间距离的函数和(x2,y2) 。别介意。问题是当我在循环中添加另一个分配时,就像这样:

double[][] ED = new double[n][m];
boolean[][] bool = new boolean[n][m];
for(int k = 0; k < q; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
ED[i][j] = dis(qx[i], qy[i], dx[j], dy[j]);
bool[i][j] = ED[i][j] > 5000;
}

我想知道 ED[i][j] 是否大于5000,所以做一个简单的比较。但新版本代码的运行时间约为8s。我认为不可能花费这么多时间。但我尝试了很多方法都找不到问题出在哪里。我希望有人能帮助我。非常感谢。这里的代码不完整,但我保证我除了添加一个简单的句子之外什么也不做。即使我添加一个 bool[i][j] = true; ,需要额外付费1.5s .

最佳答案

由于 k=2000 m=n=200,内循环即

ED[i][j]=dis(qx[i], qy[i], dx[j], dy[j]);
bool[i][j]=ED[i][j]>5000;

这将重复近2000×200×200 = 80000000次!在如此多次的迭代中,即使是简单的数组检查或 boolean 赋值也会花费大量时间。

关于java - 在循环中添加作业但在 JAVA 中花费额外 50% 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44862468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com