是否有一种快速的方法绕过2d阵列边界/边缘?

时间:2013-05-01 08:21:35

标签: loops multidimensional-array

如问题所示。我正在进行一项任务,其中边界定义为某个数字,而内部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;
 }

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

1 个答案:

答案 0 :(得分: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;
    }
}

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

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