javascript - JavaScript 中循环的性能问题

标签 javascript performance loops cplex opl

我的 JavaScript 代码遇到了巨大的性能问题。 我尝试在 OPL 中预处理 Cplex-Model 的数据,代码是用 JavaScript 编写的。

我已经尝试通过添加第一个 if 子句来加快速度 (if A[1][3]="", A[1][k] ="" 对于每个 k > 3) ,但我的计算机仍然需要 2 个多小时来处理这段代码...

Jnr = 1000,
Mnr = 35;
while (j <= Jnr) {
  while (i <= Mnr) {
    while (k <= Mnr) {
      if (A[j][k] == "") {
        break;
      } else if (A[j][k] == I[i].name) {
        counter[j][i] = counter[j][i] + 1;
      }
      k = k + 1;
    }
    k = 1;
    i = i + 1;
  }
  i = 1;
  j = j + 1;
}
j = 1;

有什么办法可以加快这个过程吗?

感谢您的帮助

最佳答案

对大循环使用脚本并不是一个好主意。如果直接在 OPL 中编写,速度会快得多:

int Jnr = 1000;
int Mnr = 35;

tuple t
{
string name;
}

t I[i in 1..Mnr]=<"A">;

string A[i in 1..Jnr][j in 1..Mnr]=((i+j)%2==0)?"A":"B";
int counter[1..Jnr][1..Mnr];

execute
{
var i=1;
var j=1;
var k=1;

while (j <= Jnr) {
  while (i <= Mnr) {
    while (k <= Mnr) {
      if (A[j][k] == "") {
        break;
      } else if (A[j][k] == I[i].name) {
        counter[j][i] = counter[j][i] + 1;
      }
      k = k + 1;
    }
    k = 1;
    i = i + 1;
  }
  i = 1;
  j = j + 1;
}
j = 1;
}


int counter2[i in 1..Jnr][j in 1..Mnr]=sum(k in 1..Mnr) (I[k].name==A[i][k]);

execute
{
counter2;
}


assert forall(i in 1..Jnr,j in 1..Mnr) counter[i][j]==counter2[i][j];

counter 在我的机器上需要 9 秒,而 counter2 需要 0.3 秒

关于javascript - JavaScript 中循环的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56550754/

相关文章:

java - 使用行、列和字符的输入创建形状以填充形状时出现问题

javascript - Onclick 事件之后的 Mousemove 事件

javascript - 如何在同一 Controller 文件中引用另一个 put 操作方法?

.net - 为什么要使用List(T).Clear O(N)?

mysql - 使用两个 MySQL 循环填充表

JQuery - 迭代值的集合

javascript - 为什么 fs.write 中出现 "bad argument"错误

javascript - 动态创建的元素上的事件绑定(bind)?

c# - 在 C# 和 C++ 中将 float / double 乘以 0.5 而不是除以 2 是否安全?

javascript - 填充 Int32Array 时 Node.JS 性能与 native C++ 插件的对比