我有 3 个矩阵,gX
、gY
和 gNorm
,以及一个如下所示的 for 循环:
for(y=1; y<n-1; y++){
int base = y*this->_nxsIn;
for(x=1; x<n-1; x++){
i1 = base + x;
i2 = i1 + 1;
i3 = i1 + n;
den = ( (gX[i1]+gY[i1])*gNorm[i1] - gX[i2]*gNorm[i2] - gY[i3]*gNorm[i3];
}
如果我以这种方式提取乘积 gX * gNorm
和 gY * gNorm
:
for(y=0; y<n; y++){
int base = y*n;
for(x=0; x<n; x++){
i = base + x;
GxGnorm[i] = gX[i]*gNorm[i];
}
}
//Gy * GNorm
for(y=0; y<n; y++){
int base = y*n;
for(x=0; x<n; x++){
i = base + x;
GyGnorm[i] = gY[i]*gNorm[i];
}
}
for(y=1; y<this->_nysIn-1; y++){
int base = y*this->_nxsIn;
for(x=1; x<this->_nxsIn-1; x++){
i1 = base + x;
i2 = i1 + 1;
i3 = i1 + n;
i1Sum = GxGnorm[i1] + GyGnorm[i1]; //(gX[i1]+gY[i1])*gNorm[i1];
float sum1 = GxGnorm[i2] + GyGnorm[i3]; //gX[i2]*gNorm[i2];
}
}
我可以缩短计算时间吗?
如果没有,为什么?
最佳答案
嗯,两个脚本都有相同的渐近时间,O(n^2),如果您有大量数据集,这会很糟糕。
当您在第二个脚本中重复嵌套循环时,您实际上是在增加常数因子。再加上创建额外阵列的成本。
除此之外,这两个脚本非常相似。因此,第二个脚本实际上可能会更慢。
关于c++ - C/C++脚本优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21954289/