// Codificación Tunstall: compresión óptima de variable a longitud fija
Mapea secuencias de longitud variable a códigos de longitud fija.
El diccionario se construye usando la distribución de probabilidad de los símbolos.
Los códigos de longitud fija permiten una decodificación simple y rápida.
La codificación Tunstall construye un diccionario de secuencias de longitud variable que se asignan a códigos binarios de longitud fija. A partir de símbolos individuales, expande iterativamente la secuencia de mayor probabilidad añadiendo cada símbolo del alfabeto. Esto produce un código variable-a-fijo óptimo donde las secuencias más probables obtienen sus propios códigos.
Texto: 'aabaa' con P(a)=0.8, P(b)=0.2 Construcción del diccionario (códigos de 3 bits): Inicial: a, b Expandir 'a': aa, ab Expandir 'aa': aaa, aab Expandir 'ab': aba, abb Diccionario final (8 códigos): aaa → 000 aab → 001 aba → 010 abb → 011 aa → 100 ab → 101 a → 110 b → 111 Codificación: 'aabaa' → 001 100 (aab + aa)
La codificación Tunstall es un método de codificación entrópica de longitud variable a fija. A diferencia de Huffman (fijo a variable), Tunstall asigna secuencias de longitud variable a palabras de código de longitud fija, lo que la hace ideal para aplicaciones que requieren una tasa de salida constante.
Huffman: entrada fija → salida variable (por ejemplo, 'a' → '0', 'b' → '10'). Tunstall: entrada variable → salida fija (por ejemplo, 'aa' → '000', 'ab' → '001'). Tunstall es mejor para hardware y sincronización, pero normalmente ofrece ratios de compresión algo menores.
Se comienza con símbolos individuales. Luego se repite: 1) encontrar la secuencia con mayor probabilidad, 2) eliminarla y añadir todas las extensiones posibles añadiendo un símbolo, 3) continuar hasta alcanzar el tamaño de diccionario deseado (2^n para códigos de n bits).
La codificación Tunstall se utiliza en compresión de voz, codificación de imágenes y escenarios donde se requiere una tasa de salida fija. Es especialmente útil en implementaciones de hardware y sistemas en tiempo real donde los códigos de longitud variable complicarían el temporizado.