Como você transporia uma matriz binária?
Eu tenho matrizes binárias em C ++ que eu represento com um vetor de valores de 8 bits.
Por exemplo, a seguinte matriz:
1 0 1 0 1 0 1
0 1 1 0 0 1 1
0 0 0 1 1 1 1
é representado como:
const uint8_t matrix[] = {
0b01010101,
0b00110011,
0b00001111,
};
A razão pela qual estou fazendo isso dessa maneira é porque a computação do produto dessa matriz e um vetor de 8 bits se torna realmente simples e eficiente (apenas um AND bit a bit e um cálculo de paridade, por linha), o que é muito melhor do que calculando cada bit individualmente.
Agora estou procurando uma maneira eficiente de transpor essa matriz, mas não consegui descobrir como fazê-lo sem precisar calcular manualmente cada bit.
Apenas para esclarecer, para o exemplo acima, gostaria de obter o seguinte resultado da transposição:
const uint8_t transposed[] = {
0b00000000,
0b00000100,
0b00000010,
0b00000110,
0b00000001,
0b00000101,
0b00000011,
0b00000111,
};
NOTA: Eu preferiria um algoritmo que possa calcular isso com matrizes de tamanho arbitrário, mas também estou interessado em algoritmos que podem lidar apenas com determinados tamanhos.