Cómo transponer eficientemente una matriz de bits 2D
Sigo tropezando con este problema (por ejemplo, enesta pregunta) Dada una matriz / placa / matriz de bits 2D en forma de una matriz de tipos enteros primitivos, p. una serie delong
. Por simplicidad, podemos asumir una matriz cuadrada, por ejemplo, una matriz de 64long
valores en plataformas que tienen 64 bitslong
.
Dejarx[i]
para0 <= i < 64
ser la matriz de entrada. Calcular una matrizy[i]
para0 <= i <= 64
tal que:
(x[i] >> j) & 1 == (y[j] >> i) & 1
aquíx >> i
es el desplazamiento a la derecha bit a bit dex
pori
pedacitos&
es bit a bit yx[i]
es el valor eni
th posición en la matrizx
.
Cómo implementar una función que mapea la matrizx
para armary
más eficientemente?
Principalmente estoy buscando métodos no destructivos, que dejan la matriz de entradax
intacto.
El lenguaje de programación utilizado debe tener matrices y operaciones bit a bit en tipos enteros. Muchos idiomas cumplen estos requisitos. Las soluciones C / C ++ y Java se verán muy similares, así que elija estos lenguajes.