c++ - C/C++脚本优化

标签 c++ c optimization functional-programming compiler-optimization

我有 3 个矩阵,gXgYgNorm,以及一个如下所示的 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 * gNormgY * 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/

相关文章:

c++ - 未调用 move 构造函数

c - 参数名称和个数

jQuery干优化

c - 为什么 printf(char[]) 会生成警告,同时 printf ("asdf") 不会

c - exec 从终端应用程序杀死终端

c - 将整数和字符数组写入文件

java - 查找字符串中最常见字符的更有效方法

c++ - istream 和 ostream 跨平台

c++ - 属性 "deprecated"到 C++17 中的命名空间

c++ - 分配作为默认初始化