Мне нужно найти диагональную разницу в матрице, представленной как 2d-массив, а прототип функции -
int diagonal_diff(int x[512][512])
Я должен использовать 2d-массив, и данные имеют размер 512x512. Это проверено на машине SPARC: мое текущее время составляет 6 мс, но мне нужно быть менее 2 мс.
Пример данных:
[3][4][5][9]
[2][8][9][4]
[6][9][7][3]
[5][8][8][2]
Разница в следующем:
|4-2| + |5-6| + |9-5| + |9-9| + |4-8| + |3-8| = 2 + 1 + 4 + 0 + 4 + 5 = 16
Для этого я использую следующий алгоритм:
int i,j,result=0;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
result+=abs(array[i][j]-[j][i]);
return result;
Но этот алгоритм продолжает обращаться к столбцу, строке, столбцу, строке и т. Д., Что неэффективно. кеша.
Есть ли способ улучшить мою функцию?