У меня есть 3 матрицы, gX
, gY
и gNorm
, а один для цикла:
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
продукты 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), что плохо, если у вас есть существенный набор данных.
Поскольку у вас есть повторения вложенных циклов во втором скрипте, вы фактически увеличиваете постоянный коэффициент. Добавьте к этому затраты на создание дополнительных массивов.
Кроме этих обоих сценариев, они очень похожи. Таким образом, второй скрипт может быть медленнее.