如问题所示。我正在进行一项任务,其中边界定义为某个数字,而内部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;
}
但还有另一种(更快)的方法吗?
答案 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;
}
}
这可能会消除运行循环中的一些代码开销,但正如我所说,我认为你不会从中获得预期的性能提升。
并且,与所有优化尝试一样,您应该测量,而不是猜测!尝试使用真实数据,如果收益不超过成本(更复杂的代码),沟渠它