#java
#java
Вопрос:
Мне интересно, какой наиболее эффективный способ найти абсолютное значение разницы между двумя массивами с плавающей точкой?
Является ли это следующим:
private float absDifference(float[] vector1, float[] vector2) {
float difference=0;
int len=Math.max(vector1.length, vector2.length);
for(int n=0;n<len;n ){
float diff=0;
if(n<vector1.length){
diff =vector1[n];
}
if(n<vector2.length){
diff-=vector2[n];
}
difference =Math.abs(diff);
}
return difference;
}
Ответ №1:
private float absDifference(float[] vector1, float[] vector2) {
float difference=0;
int len=Math.min(vector1.length, vector2.length);
for(int n=0;n<len;n ){
diff =vector1[n]-vector2[n];
difference =Math.abs(vector1[n]-vector2[n]);
}
if(vector1.length > vector2.length){
for(;n<vector1.length;n ){
difference =Math.abs(vector1[n]);
}
}else{
for(;n<vector2.length;n ){
difference =Math.abs(vector2[n]);
}
}
return difference;
}
таким образом, нет повторной проверки границ внутри первого цикла, после чего остальная часть более длинного массива обрабатывается отдельно
Комментарии:
1. Я изменил ваш код, чтобы он компилировался, и это было быстрее, спасибо.
2. Вы можете исключить
if
иelse
и просто поместить туда оба цикла for — один из них будет циклом с нулевыми итерациями.3. Кроме того, ваша
diff = ...
строка является лишней (и, вероятно, это то, что нужно было изменить, чтобы быть компилируемым, в дополнение к перемещениюint n
объявления перед циклом).