> codificación aritmética | bits fraccionarios | óptima <
// Codificación aritmética - codificación con bits fraccionarios cercana al límite de entropía
Casi óptima
Se aproxima al límite teórico de entropía para una compresión eficiente.
Bits fraccionarios
Codifica símbolos utilizando bits fraccionarios basados en su probabilidad.
Transmisión en flujo
Puede codificar y decodificar datos de forma incremental a medida que llegan.
>> información técnica
Cómo funciona la codificación aritmética:
La codificación aritmética representa todo un mensaje como un único número en el intervalo [0,1). Cada símbolo va estrechando este intervalo según su probabilidad. El intervalo final se codifica como una fracción binaria, logrando una compresión muy cercana al límite de entropía.
Proceso de codificación:
Texto: "AAB" Probabilidades: A=0.67, B=0.33 1. Inicio: [0, 1) 2. 'A': [0, 0.67) 3. 'A': [0, 0.45) 4. 'B': [0.30, 0.45) Salida: cualquier número en [0.30, 0.45) Binario: 0.010011...
Por qué usar codificación aritmética:
- >Mejores tasas de compresión
- >Se aproxima al límite de entropía
- >Soporta cualquier distribución de probabilidad
- >Utilizada en JPEG2000 y H.264
- >Patentes caducadas (2024)
>> preguntas frecuentes
¿Qué es la codificación aritmética?
La codificación aritmética es una forma de codificación entrópica que convierte una secuencia de símbolos en un único número fraccionario. A diferencia de la codificación de Huffman, que utiliza bits completos, la codificación aritmética puede usar bits fraccionarios por símbolo.
¿Por qué es mejor que Huffman?
La codificación aritmética puede lograr una compresión arbitrariamente cercana al límite de entropía, mientras que Huffman está limitada a bits completos por símbolo. Para distribuciones de probabilidad muy sesgadas, la codificación aritmética puede ser significativamente mejor.
¿Qué es el parámetro de precisión?
La precisión controla el número de bits que se usan en los cálculos internos. Una mayor precisión permite codificar mensajes más largos, pero requiere más memoria. 16 bits suelen ser suficientes para textos cortos.
¿Dónde se utiliza la codificación aritmética?
La codificación aritmética se utiliza en estándares modernos de compresión como el vídeo H.264/H.265, las imágenes JPEG2000 y el modo DEFLATE64 de ZIP. Antes estaba cubierta por patentes, pero las patentes clave ya han expirado.
// Ejemplo resuelto
| Step | Symbol | low | high |
|---|---|---|---|
| 0 | — | 0 | 1 |
| 1 | A | 0 | 0.5 |
| 2 | B | 0.25 | 0.375 |
| 3 | C | 0.34375 | 0.375 |
// Ejemplos de código
Model P(A)=0.5 P(B)=0.25 P(C)=0.25 -> A:[0,0.5) B:[0.5,0.75) C:[0.75,1)
Update width = high - low
high = low + width * cum_high(symbol)
low = low + width * cum_low(symbol)
Output any value in [0.34375, 0.375) e.g. 0.34375 = 0.01011b (5 bits = 1 + 2 + 2)
Entropy -log2 P(A) - log2 P(B) - log2 P(C) = 1 + 2 + 2 = 5 bits
>> Más preguntas
P: ¿Por qué la codificación aritmética suele ser mejor que Huffman?
R: Huffman asigna a cada símbolo un número entero de bits (al menos 1). La codificación aritmética codifica todo el mensaje como una sola fracción en [0, 1) y se acerca a la entropía, incluso con símbolos de probabilidad superior al 50 % que en Huffman cuestan igualmente 1 bit.
P: ¿Cómo funciona el ejemplo de intervalos ABC?
R: Con A=0,5, B=0,25, C=0,25 el intervalo se estrecha por símbolo: [0,1) → [0,0,5) → [0,25, 0,375) → [0,34375, 0,375). Cualquier número dentro, por ejemplo 0,34375 = 0,01011 en binario, codifica «ABC» con 5 bits, justo la entropía.
P: ¿Dónde se usa la codificación aritmética?
R: En CABAC de H.264/HEVC, el codificador MQ de JPEG 2000 y JBIG2, y variantes como range coding (AV1) y ANS (zstd, JPEG XL). Las primeras patentes frenaron su adopción; hoy en su mayoría han caducado.