Inicio · Parte 13 — Teoría de la información, señales y series
longitud media = Σ p(x)·len(código(x))
H(p) ≤ longitud media < H(p) + 1
código de prefijo: ninguno es prefijo de otro
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.
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.
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
frecuenciascodigos_huffmanlongitud_media_bitsentropia_bitslongitud_fija_necesariaahorro_vs_longitud_fija_%cumple_la_cota_de_Shannoncodigo_libre_de_prefijos{
"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
}
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.
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.
10.1109/jrproc.1952.273898 verificado en Crossref (2026-08-19).10.1002/047174882x verificado en Crossref (2026-08-19).