Днес се хванах да ровя за имплементация решаваща проблема със завъртане на NxN матрица с 90°
Питах чичо Гошо, но намерих само два вида решения - чрез xor или чрез временна променлива.
Понеже знаем, че алгоритъма решаващ това
In-place_matrix_transposition#Square_matrices е доста неприятен за кеша на процесорите, а и най-добрия случай е big O(n²).
Та се питах дали няма някакъв, така да се каже, логаритмичен начин за решаване на този проблем?
Ако сте запознати с някаква имплементация от рода на разделяне на проблема на две при всяка стъпка, моля да го споделите.
ПС: Намерих нещо елегантно, но все още се чудя дали няма нещо по-добро:
GeSHi (C):
int tmp, l;
for(int i = 0; i < M_SIZE/2; i++)
{
for(int j = i, k = M_SIZE - i - 1; j < k; j++)
{
tmp = m[i][j];
l = M_SIZE - j - 1;
m[i][j] = m[l][i];
m[l][i] = m[k][l];
m[k][l] = m[j][k];
m[j][k] = tmp;
}
}