🧮 Computational Mathematics

Inicio · Parte 13 — Teoría de la información, señales y series

268 — Codificación y compresión

avanzado clase 8 de 20 4 horas demostración coding_compression

Huffman da códigos cortos a lo frecuente y se acerca al límite de Shannon.

Fórmulas

longitud media = Σ p(x)·len(código(x))
H(p) ≤ longitud media < H(p) + 1
código de prefijo: ninguno es prefijo de otro

Desarrollo

La compresión sin pérdida explota que los símbolos no son equiprobables. Un código de longitud fija gasta ⌈log₂ n⌉ bits por símbolo sea cual sea su frecuencia; uno de longitud variable puede gastar menos en los frecuentes y más en los raros, reduciendo el promedio.

La condición para que eso funcione sin separadores es que sea un código de prefijo: ningún código puede ser el comienzo de otro. Así el decodificador sabe dónde termina cada símbolo sin marcadores adicionales. La construcción de Huffman garantiza esa propiedad por diseño, fusionando repetidamente los dos símbolos menos probables en un árbol binario.

Huffman es óptimo entre los códigos de prefijo de símbolo a símbolo, y su longitud media queda siempre a menos de un bit por encima de la entropía. Esa cota es ajustada: la pérdida viene de que las longitudes deben ser enteras, y las probabilidades rara vez son potencias de dos.

Para acercarse más al límite hay que codificar bloques de símbolos o abandonar la restricción de longitudes enteras, que es lo que hace la codificación aritmética. Los compresores modernos combinan modelado estadístico con codificación aritmética, y los modelos de lenguaje son, vistos desde aquí, modelos de compresión: minimizar la pérdida es minimizar los bits necesarios para transmitir el texto.

Ejemplo trabajado

Código de Huffman para cinco símbolos con frecuencias dispares.

símbolo   p        código Huffman   longitud
  a      0,45          0                1
  b      0,25          10               2
  c      0,15          110              3
  d      0,10          1111             4
  e      0,05          1110             4

longitud media = 0,45·1 + 0,25·2 + 0,15·3 + 0,10·4 + 0,05·4
               = 2,0 bits/símbolo

entropía = 1,977235 bits/símbolo
cota: 1,9772 ≤ 2,0 < 2,9772                          ✓

longitud fija necesaria: ⌈log₂ 5⌉ = 3 bits
ahorro: 33,3 %

Prefijo: ningún código empieza por otro → decodificable.

Qué calcula el laboratorio

Código de Huffman frente a codificación de longitud fija.

python classes/part-13-teoria-de-la-informacion-senales-y-series/268-codificacion-y-compresion/lab.py
compmath run 268

Salidas del laboratorio (8)

Muestra de la ejecución real

{
  "frecuencias": {
    "a": 0.45,
    "b": 0.25,
    "c": 0.15,
    "d": 0.1,
    "e": 0.05
  },
  "codigos_huffman": {
    "a": "0",
    "b": "10",
    "c": "110",
    "d": "1111",
    "e": "1110"
  },
  "longitud_media_bits": 2.0,
  "entropia_bits": 1.977235,
  "longitud_fija_necesaria": 3,
  "ahorro_vs_longitud_fija_%": 33.3333
}

Errores comunes

Dónde se usa

Compresión de archivos y de imágenes, tokenización BPE, codificación de entropía en vídeo y evaluación de modelos de lenguaje por bits por carácter.

Idea rectora de la parte

KL no es simétrica ni es una distancia; JS sí es simétrica.

Error a evitar

Comparar entropías calculadas en bases logarítmicas distintas.

Conexión con IA

La función de pérdida de casi todo clasificador es entropía cruzada; el VAE optimiza un ELBO con un término KL; las CNN son convoluciones aprendidas.

Bibliografía de la clase

Archivos de la clase