Como transpor eficientemente uma matriz de bits 2D

Continuo tropeçando nesse problema (por exemplo, emessa questão) Dada uma matriz / placa / matriz de bits 2D na forma de uma matriz de tipos inteiros primitivos, p. uma matriz delong. Para simplificar, podemos assumir uma matriz quadrada, por exemplo, uma matriz de 64long valores em plataformas com 64 bitslong.

Deixeix[i] para0 <= i < 64 ser a matriz de entrada. Computar uma matrizy[i] para0 <= i <= 64 de tal modo que:

(x[i] >> j) & 1 == (y[j] >> i) & 1

Aquix >> i é o deslocamento à direita bit a bit dex pori bits,& é bit a bit e, ex[i] é o valor emith posição na matrizx.

Como implementar uma função que mapeia a matrizx ordenary com mais eficiência?

Principalmente, estou procurando métodos não destrutivos, que deixam a matriz de entradax intacto.

Linguagem de implementação

A linguagem de programação usada deve ter matrizes e operações bit a bit em tipos inteiros. Muitos idiomas atendem a esses requisitos. As soluções C / C ++ e Java serão muito semelhantes, então vamos escolher essas linguagens.

questionAnswers(1)

yourAnswerToTheQuestion