codificar | decodificar | comprimir

> mtf | move | front <

// Move-to-Front - Reordenamiento dinámico de listas para mejor compresión

[ADAPTIVE]

Auto-adaptativo

Se adapta automáticamente a los patrones locales de los datos.

[LOCALITY]

Aprovecha la localidad

Los símbolos recientes reciben índices más pequeños para mejorar la compresión.

[BZIP2]

Parte de bzip2

Se utiliza después de la BWT en la tubería de compresión de bzip2.

>> información técnica

Cómo funciona MTF:

MTF mantiene una lista de todos los símbolos posibles. Al codificar un símbolo, se emite su posición actual en la lista y luego se mueve a la parte frontal. Esto hace que los símbolos usados recientemente tengan índices pequeños, lo que se comprime mejor con la codificación de entropía posterior.

Ejemplo de codificación:

Texto: "banana" Lista inicial: [a,b,c,d,...] "b": índice 1, mover b→frente [b,a,c,d,...] "a": índice 1, mover a→frente [a,b,c,d,...] "n": índice 13, mover n→frente [n,a,b,c,...] "a": índice 1, mover a→frente [a,n,b,c,...] "n": índice 1, mover n→frente [n,a,b,c,...] "a": índice 1, mover a→frente [a,n,b,c,...] Salida: [1,1,13,1,1,1]

Por qué usar MTF:

  • >Mejora la redundancia local
  • >Funciona junto con BWT
  • >Implementación sencilla
  • >Transformación reversible
  • >Se adapta a los patrones

>> preguntas frecuentes

¿Qué es la codificación Move-to-Front?

MTF es un algoritmo de transformación de datos que codifica cada símbolo como su índice en una lista actualizada dinámicamente. Después de codificar cada símbolo, se mueve al frente de la lista, de modo que los símbolos frecuentes obtienen índices más pequeños.

¿Por qué usar MTF junto con BWT?

BWT agrupa contextos similares y crea repeticiones locales. MTF transforma esas repeticiones en números pequeños (muchos 0 y 1), que se comprimen muy bien con codificación por longitud de corrida o codificación de Huffman.

¿Cómo funciona la lista?

La lista empieza con los 256 valores de byte posibles en orden. A medida que se codifican símbolos, los usados se mueven al frente. Los símbolos usados recientemente permanecen cerca del frente con índices pequeños, mientras que los no usados se desplazan hacia índices más grandes.

¿MTF frente a otras transformaciones?

MTF está diseñado específicamente para usarse después de BWT. No es muy eficaz por sí solo, pero es excelente para convertir la salida de BWT en una forma que se comprime bien. Es más sencillo que la codificación aritmética, pero menos óptimo.

// Ejemplo resuelto

#SymbolIndexList
1b1abcdefg…
2a1bacdefg…
3n13abcdefg…
4a1nabcdef…
5n1anbcdef…
6a1nabcdef…

// Ejemplos de código

Input     banana       initial list: a b c d ... z (index from 0)
Output    1 1 13 1 1 1
Encode    output the index of the symbol, then move it to the front
Decode    read index, output list[index], move it to the front
Use       after BWT: runs of equal symbols become runs of 0s,
          which RLE and Huffman/arithmetic coding then compress well (bzip2)

>> Más preguntas

P: ¿Para qué sirve Move-to-Front?

R: MTF no es compresión en sí sino una transformación: los símbolos recientes reciben índices pequeños. Resultan muchos 0 y 1, que un codificador entrópico (Huffman, aritmético) comprime bien.

P: ¿Qué relación tiene con la transformada de Burrows-Wheeler?

R: La BWT agrupa caracteres iguales en tramos. MTF los convierte en secuencias de números pequeños, sobre todo 0. La cadena BWT → MTF → RLE → Huffman es la de bzip2.

P: ¿Es MTF sin pérdida y reversible?

R: Sí. El decodificador parte de la misma lista inicial y sigue los mismos movimientos. La lista inicial (alfabeto y orden) debe ser idéntica en ambos lados.

Otros idiomas