
En matemáticas aplicadas, una permutación de inversión de bits es una permutación de una secuencia deartículos, dondees una potencia de dos . Se define indexando los elementos de la secuencia por los números desdea, representando cada uno de estos números por su representación binaria (rellenada para tener una longitud exactamente), y asignando cada elemento al elemento cuya representación tiene los mismos bits en orden inverso.
Repetir la misma permutación dos veces devuelve al orden original de los elementos, por lo que la permutación de inversión de bits es una involución .
Esta permutación se puede aplicar a cualquier secuencia en tiempo lineal realizando únicamente cálculos de índices sencillos. Tiene aplicaciones en la generación de secuencias con baja discrepancia y en la evaluación de transformadas rápidas de Fourier .
Ejemplo
Consideremos la secuencia de ocho letras abcdefgh . Sus índices son los números binarios 000, 001, 010, 011, 100, 101, 110 y 111, que al invertirlos se convierten en 000, 100, 010, 110, 001, 101, 011 y 111. Así, la letra a en la posición 000 se asigna a la misma posición (000), la letra b en la posición 001 se asigna a la quinta posición (la numerada como 100), etc., dando como resultado la nueva secuencia aecgbfdh . Al repetir la misma permutación en esta nueva secuencia, se regresa a la secuencia inicial.
Escribiendo los números de índice en decimal (pero, como se indicó anteriormente, comenzando con la posición 0 en lugar del inicio más convencional de 1 para una permutación), las permutaciones de inversión de bits enartículos, para, son: [ 1 ]
Cada permutación de esta secuencia se puede generar concatenando dos secuencias de números: la permutación anterior, con sus valores duplicados, y la misma secuencia con cada valor incrementado en uno. Así, por ejemplo, duplicar la permutación de longitud 4 0 2 1 3 da 0 4 2 6 , sumar uno da 1 5 3 7 , y concatenar estas dos secuencias da la permutación de longitud 8 0 4 2 6 1 5 3 7. [ 2 ]
Generalizaciones
La generalización a la raízrepresentaciones, paray a, es una permutación de inversión de dígitos , en la que la base-Los dígitos del índice de cada elemento se invierten para obtener el índice permutado. Esta misma idea puede generalizarse a sistemas numéricos de base mixta . En tales casos, la permutación de inversión de dígitos debe invertir simultáneamente los dígitos de cada elemento y las bases del sistema numérico, de modo que cada dígito invertido permanezca dentro del rango definido por su base. [ 3 ]
Las permutaciones que generalizan la permutación de inversión de bits invirtiendo bloques contiguos de bits dentro de las representaciones binarias de sus índices pueden usarse para intercalar dos secuencias de datos de igual longitud en el mismo lugar. [ 4 ]
Existen dos extensiones de la permutación de inversión de bits para secuencias de longitud arbitraria. Estas extensiones coinciden con la inversión de bits para secuencias cuya longitud es una potencia de 2, y su propósito es separar elementos adyacentes en una secuencia para el funcionamiento eficiente del algoritmo de Kaczmarz . La primera de estas extensiones, denominada ordenación eficiente , [ 5 ] opera sobre números compuestos y se basa en la descomposición del número en sus componentes primos.
La segunda extensión, llamada EBR (inversión de bits extendida), es similar en espíritu a la inversión de bits. Dado un array de tamaño, EBR llena la matriz con una permutación de los números en el rangoen tiempo lineal. Los números sucesivos están separados en la permutación por al menosposiciones. [ 6 ]
Aplicaciones
La inversión de bits es de suma importancia para los algoritmos FFT de Cooley-Tukey de base 2 , donde las etapas recursivas del algoritmo, que operan in situ , implican una inversión de bits de las entradas o salidas. De manera similar, las inversiones de dígitos de base mixta surgen en las FFT de Cooley-Tukey de base mixta. [ 7 ]
La permutación de inversión de bits también se ha utilizado para diseñar límites inferiores en la computación distribuida. [ 8 ]
La secuencia de Van der Corput , una secuencia de números de baja discrepancia en el intervalo unitario , se forma reinterpretando los índices de la permutación de inversión de bits como las representaciones binarias de punto fijo de los números racionales diádicos .
Las permutaciones de inversión de bits se utilizan a menudo para encontrar límites inferiores en estructuras de datos dinámicas . Por ejemplo, sujeto a ciertas suposiciones, el costo de buscar los enteros entrey, inclusive, en cualquier árbol de búsqueda binaria que contenga esos valores, escuando esos números se consultan en orden de bits invertidos. Este límite se aplica incluso a árboles como los árboles splay , a los que se les permite reorganizar sus nodos entre accesos. [ 9 ]
Algoritmos
Debido principalmente a la importancia de los algoritmos de transformada rápida de Fourier , se han ideado numerosos algoritmos eficientes para aplicar una permutación de inversión de bits a una secuencia. [ 2 ]
Dado que la permutación de inversión de bits es una involución, puede realizarse fácilmente in situ (sin copiar los datos en otro array) intercambiando pares de elementos. En la máquina de acceso aleatorio comúnmente utilizada en el análisis de algoritmos, un algoritmo simple que recorre los índices en el orden de entrada e intercambia cuando encuentra un índice cuya inversión es mayor realizaría un número lineal de movimientos de datos. [ 10 ] Sin embargo, calcular la inversión de cada índice puede requerir un número no constante de pasos. Existen algoritmos alternativos que pueden realizar una permutación de inversión de bits en tiempo lineal utilizando únicamente cálculos de índices sencillos. [ 11 ] Debido a que las permutaciones de inversión de bits pueden repetirse varias veces como parte de un cálculo, puede ser útil separar los pasos del algoritmo que calculan los datos de índice utilizados para representar la permutación (por ejemplo, mediante el método de duplicación y concatenación) de los pasos que utilizan los resultados de este cálculo para permutar los datos (por ejemplo, escaneando los índices de datos en orden y realizando un intercambio cuando la ubicación intercambiada es mayor que el índice actual, o mediante operaciones de dispersión-recolección de vectores más sofisticadas ). [ 2 ]
Otra consideración aún más importante para el rendimiento de estos algoritmos es el efecto de la jerarquía de memoria en el tiempo de ejecución. Debido a este efecto, los algoritmos más sofisticados que consideran la estructura de bloques de la memoria pueden ser más rápidos que este escaneo ingenuo. [ 2 ] [ 10 ] Una alternativa a estas técnicas es un hardware informático especial que permite acceder a la memoria tanto en orden normal como en orden inverso de bits. [ 12 ]
Se ha prestado especial atención a la mejora del rendimiento de las operaciones de inversión de bits en el campo de la computación de alto rendimiento. El desarrollo de algoritmos que tengan en cuenta la arquitectura es crucial para permitir un uso óptimo de los recursos de hardware y software del sistema, como las cachés, las TLB y los procesadores multinúcleo. [ 13 ]
Referencias
- ↑ Sloane, N. J. A. (ed.), "Secuencia A030109" , La enciclopedia en línea de secuencias de enteros , Fundación OEIS
- 1 2 3 4 Karp, Alan H. (1996), "Inversión de bits en uniprocesadores", SIAM Review , 38 (1): 1– 26, CiteSeerX 10.1.1.24.2913 , doi : 10.1137/1038001 , MR 1379039 Karp analiza y compara 30 algoritmos diferentes para la inversión de bits, desarrollados entre 1965 y la publicación de su estudio en 1996.
- ↑ Elster, Anne C. (1989), "Algoritmos rápidos de inversión de bits", Conferencia Internacional IEEE sobre Acústica, Habla y Procesamiento de Señales, ICASSP '89, Glasgow, Escocia, 23-26 de mayo de 1989 , pp. 1099–1102 , doi : 10.1109/ICASSP.1989.266624 , S2CID 15028026
- ↑ Yang, Qingxuan; Ellis, John; Mamakani, Khalegh; Ruskey, Frank (2013), "Permutación in situ y mezcla perfecta mediante involuciones", Information Processing Letters , 113 ( 10–11 ): 386–391 , arXiv : 1204.1958 , doi : 10.1016/j.ipl.2013.02.017 , MR 3037467 , S2CID 14672841 .
- ↑ Herman, Gabor T. (2009), Fundamentos de la tomografía computarizada (2.ª ed.), Londres: Springer, pág. 209 , ISBN 978-1-85233-617-2
- ↑ Gordon, Dan (junio de 2017), "Un enfoque de desaleatorización para recuperar señales de ancho de banda limitado en un amplio rango de tasas de muestreo aleatorio", Numerical Algorithms , 77 (4): 1141–1157 , doi : 10.1007/s11075-017-0356-3 , S2CID 254889989
- ↑ B. Gold y CM Rader, Procesamiento digital de señales (Nueva York: McGraw–Hill, 1969).
- ↑ Frederickson, Greg N.; Lynch, Nancy A. (1984), "El impacto de la comunicación síncrona en el problema de elegir un líder en un anillo" (PDF) , Actas del decimosexto Simposio Anual de la ACM sobre Teoría de la Computación (STOC '84) , págs. 493–503 , doi : 10.1145/800057.808719 , ISBN 978-0897911337.
- ↑ Wilber, Robert (1989), "Límites inferiores para el acceso a árboles de búsqueda binaria con rotaciones" , 27.º Simposio Anual sobre Fundamentos de la Informática (SFCS 1986) , págs. 61-70 , doi : 10.1109/SFCS.1986.28 , ISBN 0-8186-0740-8.
- 1 2 Carter, Larry; Gatlin, Kang Su (1998), "Hacia un programa óptimo de permutación con inversión de bits", Actas del 39.º Simposio Anual sobre Fundamentos de la Informática (FOCS) , págs. 544–553 , CiteSeerX 10.1.1.46.9319 , doi : 10.1109/SFCS.1998.743505 , ISBN 978-0-8186-9172-0, S2CID 14307262 .
- ↑ Jeong, Jechang; Williams, WJ (1990), "Un algoritmo rápido de inversión de bits recursivo", Conferencia Internacional sobre Acústica, Habla y Procesamiento de Señales (ICASSP-90) , vol. 3, pp. 1511–1514 , doi : 10.1109/ICASSP.1990.115695 , S2CID 122373780 .
- ↑ Harley, TR; Maheshwaramurthy, GP (2004), "Generadores de direcciones para mapear matrices en orden invertido de bits", IEEE Transactions on Signal Processing , 52 (6): 1693– 1703, Bibcode : 2004ITSP...52.1693H , doi : 10.1109/TSP.2004.827148 , S2CID 10043478 .
- ↑ Zhang, Zhao; Zhang, Xiaodong (2000), "Inversiones rápidas de bits en uniprocesadores y multiprocesadores de memoria compartida", SIAM Journal on Scientific Computing , 22 (6): 2113– 2134, doi : 10.1137/S1064827599359709 , MR 1856305
- Permutaciones
- transformadas rápidas de Fourier
- Algoritmos combinatorios