1

如问题所示。我正在做一个任务,其中边界被定义为某个数字,而内部 2d 数组需要一些计算。我写:

 for(int col = 0; col < this.w; col++){
    energyMatrix[0][col]  = 195075;
    energyMatrix[this.h-1][col] = 195075;
 }
 for(int row = 1; row < this.h - 1; row++){
    energyMatrix[row][0] =  195075;
    energyMatrix[row][this.w-1] = 195075;
 }

但是还有另一种(更快)的方法吗?

4

1 回答 1

1

可能有许多不同的方法可以实现相同的目标,如果您只是告诉我们您实际使用哪种语言进行编码:-) 您所拥有的对(至少)C、C++ 和 Java 有效。

但是,它们中的任何一个都不太可能比您那里的速度快得多。如果您更多地考虑宏观层面(算法选择、缓存等)而不是这个细节层面,您更有可能获得更好的性能改进。


您可以尝试的一件事,尽管我仍然认为它会带来可疑的改进,那就是通过在第一个循环中做更多的工作来最小化第二个循环的大小:

if (this.h >= this.w) {
    for (int i = 0; i < this.w; i++) {
        energyMatrix[0][i]  = 195075;
        energyMatrix[this.h-1][i] = 195075;
        energyMatrix[i][0] =  195075;
        energyMatrix[i][this.w-1] = 195075;
    }
    for (int i = this.w + 1; i < this.h; i++) {
        energyMatrix[i][0] =  195075;
        energyMatrix[i][this.w-1] = 195075;
    }
} else {
    for (int i = 0; i < this.h; i++) {
        energyMatrix[i][0] =  195075;
        energyMatrix[i][this.w-1] = 195075;
        energyMatrix[0][i]  = 195075;
        energyMatrix[this.h-1][i] = 195075;
    }
    for (int i = this.h + 1; i < this.w; i++) {
        energyMatrix[0][i]  = 195075;
        energyMatrix[this.h-1][i] = 195075;
    }
}

这可能会消除运行循环中的一些代码开销,但正如我所说,我认为您不会从中获得预期的性能改进。

而且,与所有优化尝试一样,您应该衡量而不是猜测!尝试使用真实数据,如果收益不超过成本(更复杂的代码),就放弃它。

于 2013-05-01T08:24:00.090 回答