首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在循环中添加赋值,但在JAVA中需要额外50%的时间

在循环中添加赋值,但在JAVA中需要额外50%的时间
EN

Stack Overflow用户
提问于 2017-07-01 23:15:56
回答 1查看 82关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
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)之间距离的函数。请不要介意。问题是当我在循环中添加另一个赋值时,就像这样:

代码语言:javascript
代码运行次数:0
运行
复制
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,所以做一个简单的比较。但新版本的代码运行成本约为8秒。我认为花费这么多时间是不可能的。但我尝试了很多方法,都找不到问题所在。我希望有人能帮助我。非常感谢。代码在这里是不完整的,但我保证我除了添加一个简单的句子什么也不做。即使我添加了一个bool[i][j] = true;,它也需要额外的1.5s

EN

回答 1

Stack Overflow用户

发布于 2017-07-02 00:57:02

自k=2000 m=n=200以来,内部循环即

代码语言:javascript
代码运行次数:0
运行
复制
ED[i][j]=dis(qx[i], qy[i], dx[j], dy[j]);
bool[i][j]=ED[i][j]>5000;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44862468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档