Compresión de Datos: De los Códigos Huffman al Límite de Shannon

simulation intermediate ~12 min
Cargando simulación...

Fórmula

\text{Compressed size} \geq N \cdot H \text{ bits}
\text{Compression ratio} = \frac{\text{Original size}}{\text{Compressed size}}
H \leq \bar{L} < H + 1 \quad \text{(single-symbol Huffman)}
\frac{H}{k} \leq \bar{L}_k < \frac{H}{k} + \frac{1}{k} \quad \text{(block-}k\text{ Huffman)}
Cada vez que envías una foto, transmites un video o descargas un archivo, los algoritmos de compresión trabajan silenciosamente, reduciendo los datos a su contenido de información esencial. El fundamento teórico de todo esto es el teorema de codificación de fuente de Shannon. El teorema establece un hecho notable: para cualquier fuente que produce símbolos con entropía H bits por símbolo, es imposible comprimir sin pérdida los datos por debajo de N·H bits totales (donde N es la longitud del mensaje), y es posible acercarse arbitrariamente a este límite. La entropía es, por tanto, la referencia última de compresión. La codificación Huffman, inventada por David Huffman en 1952 mientras era estudiante de posgrado en el MIT, proporciona un algoritmo práctico que se acerca a este límite. La idea clave es la codificación de longitud variable: asignar palabras código binarias cortas a los símbolos comunes y palabras código largas a los símbolos raros. El algoritmo construye un código libre de prefijos óptimo edificando un árbol binario de abajo hacia arriba, fusionando los dos símbolos menos probables en cada paso. Este simulador genera mensajes de cuatro tipos de fuente diferentes con perfiles de entropía muy distintos. El texto similar al español tiene frecuencias de letras sesgadas (la E es el 13%, la Z el 0,5%), dando una entropía de alrededor de 4,0 bits, muy por debajo del máximo de 4,75 bits para 27 letras. El texto aleatorio es casi incompresible. El texto repetitivo tiene muy baja entropía y se comprime dramáticamente. Las secuencias de ADN, con cuatro bases aproximadamente iguales, se sitúan en unos 2 bits por base. La codificación por bloques extiende el principio al tratar grupos de símbolos como unidades individuales. Como las fuentes reales tienen dependencias entre símbolos (en español, la 'q' va casi siempre seguida de 'u'), codificar bloques de símbolos juntos captura estas correlaciones y acerca la compresión a la verdadera tasa de entropía.

Preguntas frecuentes

¿Cómo funciona la codificación Huffman?

La codificación Huffman asigna códigos binarios más cortos a los símbolos más frecuentes y códigos más largos a los símbolos raros. El algoritmo construye un árbol binario de abajo hacia arriba: fusiona repetidamente los dos nodos de menor frecuencia hasta que queda un solo árbol. Los símbolos en hojas poco profundas reciben códigos cortos; las hojas profundas reciben códigos largos. El resultado es un código libre de prefijos —ninguna palabra código es prefijo de otra— que minimiza la longitud esperada del código para la distribución de frecuencias dada.

¿Qué es el teorema de codificación de fuente de Shannon?

El teorema de codificación de fuente de Shannon (teorema de codificación sin ruido) establece que una fuente con entropía H bits por símbolo no puede comprimirse sin pérdida por debajo de H bits por símbolo en promedio. Recíprocamente, puede comprimirse a una tasa arbitrariamente cercana a H usando códigos de bloques suficientemente largos. Esto establece la entropía como el límite fundamental de la compresión sin pérdida.

¿Por qué no se pueden comprimir datos aleatorios?

Los datos verdaderamente aleatorios tienen entropía máxima: cada símbolo es igualmente probable y no hay patrones. Como la entropía es igual a log₂(N) para N símbolos igualmente probables, el tamaño comprimido iguala al original. Por el principio del palomar, cualquier esquema de compresión que acorte algunas entradas debe alargar otras. Para datos aleatorios uniformes, ninguna entrada es más probable que otra, por lo que no es posible una compresión sistemática.

¿Cuál es la diferencia entre compresión con pérdida y sin pérdida?

La compresión sin pérdida (Huffman, LZ77, DEFLATE) preserva cada bit de los datos originales: la salida descomprimida es idéntica a la entrada. La compresión con pérdida (JPEG, MP3, H.264) descarta información considerada perceptualmente poco importante, logrando razones de compresión mucho mayores a costa de la fidelidad. El teorema de codificación de fuente de Shannon gobierna la compresión sin pérdida; la teoría de tasa-distorsión gobierna la compresión con pérdida.

Fuentes

View source on GitHub