Я не верю, что фактические значения могут иметь какое-либо значение.
Стоит хотя бы попытаться сократить вычисления здесь:
for (MatrixColumn matrixCol : matrix) {
numitorStanga += (matrixCol.getRatingForItemID1() - avgRatingForPreferredItem)
* (matrixCol.getRatingForItemID1() - avgRatingForPreferredItem);
numitorDreapta += (matrixCol.getRatingForItemID2() - avgRatingForRandomItem)
* (matrixCol.getRatingForItemID2() - avgRatingForRandomItem);
}
Это зависит от того, насколько умным является JIT-компилятор - и я предполагаю, что getRatingforItemID1
и getRatingforItemID2
являются просто сквозными свойствами - но ваш код по крайней мере выглядит , как будто он выполняет избыточные вычитания. Итак:
for (MatrixColumn matrixCol : matrix) {
double diff1 = matrixCol.getRatingForItemID1() - avgRatingForPreferredItem;
double diff2 = matrixCol.getRatingForItemID2() - avgRatingForPreferredItem;
numitorStanga += diff1 * diff1;
numitorDreapta += diff2 * diff2;
}
Вы можете попробовать , изменив все на float
вместо double
- на некоторых архитектурах, которые могут сделать вещи быстрее; на других это может и не быть.
Вы абсолютно уверены, что код, который вы показали, имеет проблему? Это всего лишь алгоритм O (N) - сколько времени это занимает, и насколько велика матрица?