我有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),如果您有大量数据集,则这是很糟糕的。
当您在第二个脚本中重复嵌套循环时,实际上是在增加常量因子。再加上创建额外阵列的成本。
除了这两个脚本,其他脚本都非常相似。因此,第二个脚本实际上可能会更慢。