Транспонирование матрицы по месту
Можно ли транспонировать(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];
}
}
}
не применяется к одному массиву, если матрица не является квадратной матрицей. Если нет, какой минимальный объем дополнительной памяти требуется?
РЕДАКТИРОВАТЬ: я уже попробовал все ароматы
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]