Problema resuelto al detalle
-
La transformada de Burrows–Wheeler de "banana$" con las siete rotaciones ordenadas 5 pasos
Halle la transformada de Burrows-Wheeler de "banana$" y decida a continuación si se ha comprimido algo. Este es el paso de Salida BWT: centinela añadido, las siete rotaciones ordenadas y lectura de la última columna.
-
El centinela se añade antes de que ocurra cualquier otra cosa. Como $ se ordena antes que cualquier letra y aparece exactamente una vez, no hay dos rotaciones que puedan resultar iguales al compararse, por lo que la ordenación tiene una única respuesta no ambigua.
-
Ordenar lexicográficamente las rotaciones es el único trabajo que realiza la transformada. Al leer hacia abajo las siete filas, obsérvese que la ordenación ha agrupado la cadena según lo que viene después de cada posición.
-
El último carácter de una rotación es el carácter situado inmediatamente antes de su primer carácter en la cadena original. Por eso la ordenación produce rachas: las filas 1 y 2 empiezan por 'a' y terminan en 'n', porque a ambas 'a' les precede una 'n' en banana. La clave es el número de fila de la cadena original, y sin ella la transformada no se puede deshacer.
-
Todavía no se ha comprimido nada, ni se podría haber comprimido: la salida es una permutación de la entrada, los mismos siete caracteres en un orden diferente. Lo que ha cambiado es la estructura de rachas, y eso es lo único que ha cambiado.
-
RLE cobra dos bytes por racha, por lo que cinco rachas cuestan diez bytes frente a una entrada de siete bytes. Su punto de equilibrio nunca cambia: el número de rachas tiene que ser inferior a la mitad de la longitud, lo que aquí significa tres o menos.
Respuesta
El panel muestra annb$aa con key = 4, una racha media de 1,4 caracteres, 10 bytes de RLE y una puntuación de 0,70×. La transformada hizo exactamente lo que promete: aumentó la racha media un 40 % sin tocar un solo carácter, y aun así la cadena de procesamiento perdió, porque siete caracteres no es suficiente texto para que esa ganancia cubra dos bytes por racha. Duplíquese la palabra y la aritmética se invierte. "bananabanana$" tiene trece caracteres y su transformada es annnnbba$aaaa: seis rachas en lugar de cinco, mientras que la longitud casi se duplicó, lo que da 12 bytes frente a 13 y una puntuación de 1,08×. Ese es todo el argumento a favor de la BWT: el recuento de rachas se rige por cuántos contextos distintos tiene el texto, no por su longitud, de modo que cuanto más largo es el bloque, mejor rinde, motivo por el cual bzip2 transforma bloques de hasta 900 kB en lugar de palabras.
-
Ruta de aprendizaje
Compresión a mano
Referencias (3)
- Insight blocks 1 and 2 — the transform itself: M. Burrows and D. J. Wheeler, "A Block-sorting Lossless Data Compression Algorithm." Digital Systems Research Center, Research Report 124, 1994.
- Insight block 3 — the aligners it turned into: B. Langmead, C. Trapnell, M. Pop and S. L. Salzberg, "Ultrafast and memory-efficient alignment of short DNA sequences to the human genome." Genome Biology 10, R25, 2009.
- And the one the block names outright: H. Li and R. Durbin, "Fast and accurate short read alignment with Burrows–Wheeler transform." Bioinformatics 25(14), 1754–1760, 2009.