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 emi
th 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.
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.