Loops 是否有一种快速的方法来循环二维阵列';s边界/边缘?
如问题所示。我正在做一个赋值,其中边界被定义为一些数字,而内部2d数组需要一些计算。我写道:Loops 是否有一种快速的方法来循环二维阵列';s边界/边缘?,loops,multidimensional-array,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] = 1950
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;
}
for(int col=0;col
<>但是,还有另一种(更快的)方法吗? < P>也许有很多不同的方法来实现同样的事情,如果你只告诉我们你在用哪种语言来编码它:-你所拥有的(至少)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;
}
}
if(this.h>=this.w){
for(int i=0;i
这可能会减少运行循环时的一些代码开销,但正如我所说的,我认为您不会从中获得预期的性能改进
而且,与所有优化尝试一样,您应该进行测量,而不是猜测!用真实数据来尝试它,如果好处不超过成本(更复杂的代码),就放弃它。 < P>可能有很多不同的方法来实现同样的事情,如果你只告诉我们你在用哪种语言来编码它:-你所拥有的(至少)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;
}
}
if(this.h>=this.w){
for(int i=0;i
这可能会减少运行循环时的一些代码开销,但正如我所说的,我认为您不会从中获得预期的性能改进
而且,与所有优化尝试一样,您应该进行测量,而不是猜测!使用真实数据进行尝试,如果收益不超过成本(更复杂的代码),请放弃它。不-没关系,代码的这部分可能不是瓶颈-通常是内部处理需要优化,如果有的话。不-没关系,代码的这一部分可能无论如何都不是一个瓶颈——它通常是需要优化的内部处理,如果有的话。