gpt4 book ai didi

java - int 数组的循环优化

转载 作者:行者123 更新时间:2023-11-29 04:23:26 25 4
gpt4 key购买 nike

我想知道,在 int 数组中写入/读取哪种方法最快。

这里是我的 Java 代码: 我有三个 int 数组,两个在读取权限中,一个 int 数组在写入权限中。

for(int j = h20 ; j < h21 ; j++){
for(int i = w20 ; i < w21 ; i++){
if( int_color == arr3[j*h31 + i] ) continue; //condition
arr1[(j+decY)*w11 + i+decX] = arr2[j*w21 + i];
}
}

我的代码是一个经典的二维数组循环,只有一个特殊条件需要检查。

是否可以通过其他方式编写此代码以减少处理时间?

谢谢。

最佳答案

如果将它们用变量分开,可以减少计算量。在您的情况下,任何单独依赖于 j 的计算都不必在内部循环内,因为结果在循环的其余部分不会改变。相反,在外部 计算值并且仅在内部循环中使用结果。

for(int j = h20 ; j < h21 ; j++){
int tmp1 = j*h31;
int tmp2 = (j+decY)*w11 + decX;
int tmp3 = j*w21;

// j won't change inside here, so you can simply use the precalculated values
for(int i = w20 ; i < w21 ; i++){
if( int_color == arr3[tmp1 + i] ) continue; //condition
arr1[tmp2 + i] = arr2[tmp3 + i];
}
}

编辑:如果你想进一步减少它,你可以重写tmp2的计算:

(j+decY)*w11 + decX ==> j*w11 + decY*w11 + decX

然后,您可以在第一个循环之外将 decY*w11 + decX 提取到它自己的变量中。

int tmp0 = decY*w11 + decX;
for(int j = h20 ; j < h21 ; j++){
int tmp1 = j*h31;
int tmp2 = j*w11 + tmp0;
int tmp3 = j*w21;

// j won't change inside here, so you can simply use the precalculated values
for(int i = w20 ; i < w21 ; i++){
if( int_color == arr3[tmp1 + i] ) continue; //condition
arr1[tmp2 + i] = arr2[tmp3 + i];
}
}

但这每次迭代只会为您节省一次添加,所以我认为不值得付出额外的努力。

关于java - int 数组的循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com