Можно ли транспонировать матрицу (m,n)
на месте, указав, что матрица представлена как один массив размером m*n
?
Обычный алгоритм
transpose(Matrix mat,int rows, int cols ){
//construction step
Matrix tmat;
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
tmat[j][i] = mat[i][j];
}
}
}
не применяется к одному массиву, если только матрица не является квадратной матрицей. Если нет, то какой минимальный объем дополнительной памяти нужен?
EDIT: Я уже пробовал все ароматы
for(int i=0;i<n;++i) {
for(int j=0;j<i;++j) {
var swap = m[i][j];
m[i][j] = m[j][i];
m[j][i] = swap;
}
}
И это неправильно. В этом конкретном примере m
даже не существует. В одной строке
матрица mat[i][j] = mat[i*m + j]
, где trans[j][i] = trans[i*n + j]