Professional Documents
Culture Documents
Capı́tulo 2
Códigos Instantáneos. El
algoritmo de Huffman
2.1. Introducción
Cuando los sı́mbolos del mensaje aparecen con frecuencias significativa-
mente diferentes, se suele usar códigos de longitud variable con el objetivo de
reducir la longitud de los mensajes codificados. Uno de los primeros ejemplos
es el código Morse, desarrollado por S. Morse a mediados del siglo XIX. En
este caso se emplean las diferencias en las frecuencias de las letras del alfabeto
inglés. Las letras se codifican en el alfabeto binario {·, −} como se indica:
A ·− G −−· L · − ·· Q − − ·− V · · ·−
B − · ·· H · · ·· M −− R ·−· W ·−−
C − · −· I ·· N −· S ··· X −·−
D −·· J ·−−−− O −−− T − Y − · −−
E · K −·− P · − −· U ··− Z − − ··
F · · −·
7
8CAPÍTULO 2. CÓDIGOS INSTANTÁNEOS. EL ALGORITMO DE HUFFMAN
T
E
N M
I A
G
W D K O
S U R
B X C Y Z Q
V F L P J
H
A 112 G 38 L 54 Q 1 V 14
B 17 H 85 M 23 R 90 W 42
C 28 I 81 N 98 S 86 X 1
D 74 J 3 O 112 T 142 Y 27
E 168 K 19 P 25 U 33 Z 0
F 31
Interesará buscar un código que minimice esta longitud media. Otra cuestión
importante es la de que el código sea de decodificación única, de lo que nos
ocupamos en el siguiente apartado.
mensaje a1 a2 a3 a4
palabra-codigo 0 01 011 0111
α1 ≤ q.
α1 q + α2 ≤ q 2 .
2.2. CÓDIGOS INSTANTÁNEOS 11
α1 q + α2 ≤ q 2
α1 q 2 + α2 q + α3 ≤ q 3
− − − − − − − − − − − − − − −−
α1 q L−1 + α2 q L−2 + · · · + αL ≤ q L .
Nótese que cada desigualdad implica la anterior, por tanto, basta que se tenga
la última. Pero ésta es precisamente la desigualdad de Kraft escrita de esta
otra forma (como en el apartado anterior, L denota la longitud máxima):
α1 q −1 + α2 q −2 + · · · + αL q −L ≤ 1.
10110, 10111.
Nota 2.3.3. Como hemos dicho con anterioridad, suponemos los sı́mbo-
los fuente {a1 , .., an } ordenados por orden decreciente de sus probabilidades:
p1 ≥ p2 ≥ · · · ≥ pn . Entonces podemos conseguir que las longitudes de las
palabras-código resulten en orden creciente de sus longitudes: L1 ≤ L2 ≤
· · · ≤ Ln . En efecto, si se tuviera Li > Lj , siendo i < j, entonces es imposible
la desigualdad pi < pj (Lema anterior). Es decir, debe ser pi = pj , en cuyo
caso, podemos intercambiar ai y aj y se consigue que el orden decreciente
de las probabilidades conlleve el orden creciente de las longitudes Lk de las
palabras-código.
Vamos a probar que también puede conseguirse que las dos últimas palabras-
código de un código instantáneo óptimo (binario)sean de la forma x0 y x1,
siendo x cierta cadena de longitud una unidad menos que la longitud máxi-
ma. Por el lema anterior, sabemos que, al menos, hay dos palabras-código de
longitud máxima que tienen la forma: x0 y x1. Las dos palabras anteriores,
x0 y x1, podemos suponer que son las últimas ( si fuera necesario, intercam-
biamos dos palabras de longitud máxima en el código y sigue siendo óptimo).
Más concretamente, si la última palabra-código, que codifica an , tiene la for-
ma x0, necesariamente la palabra x1 pertenece al código (en caso contrario,
podemos sustituir x0 por x y resulta un código instantáneo de menor longitud
media). Por tanto, tenemos que la última palabra-código de C es x0 y que
también x1 pertenece a C. Si ésta no es la penúltima, supongamos que ocupa
2.4. ALGORITMO DE HUFFMAN 15
p(a1 ) = 0.3, p(a2 ) = 0.25, p(a3 ) = 0.2, p(a4 ) = p(a5 ) = 0.1, p(a6 ) = 0.05.
16CAPÍTULO 2. CÓDIGOS INSTANTÁNEOS. EL ALGORITMO DE HUFFMAN
mensaje a1 a2 a3 a4 a56
probabilidades 0.3 0.25 0.2 0.1 0.15
b) Ahora los mensajes menos probables son a4 y a56 . El penúltimo sı́mbolo de
la palabra-código asignada a a56 es 0 y 1 es el último en el caso del mensaje
a4 . Por ahora, de las palabras-código que se asignarán a los mensajes a4 , a5
y a6 se sabe que terminan como sigue: 1, 00, 01. La forma más cómoda de
desarrollar el método de Huffman es la siguiente.
ai a a2 a3 a4 a a6
1 5
0 1
0 1 1 0 0.15
0.55
0.25
1 0
0.45
0 1
0 al mensaje an−1
1 al mensaje an
(3) Reagrupar los dos últimos sı́mbolos en un nuevo mensaje para for-
mar un nuevo conjunto S 0 = {a1 , a2 , .., an−1 ∪ an }, con probabilidades P 0 =
{p1 , .., pn−2 , pn−1 + pn }.
(4) Asignar:
S ← S0
n←n−1
P ← P0
si n > 1, entonces ir a (1). En caso contrario, detener el algoritmo, ya tenemos
codificados todos los mensajes.
El Teorema siguiente contiene la prueba de que el algoritmo de Huffman
funciona correctamente.
DEMOSTRACIÓN: Tenemos que C 0 = {c01 , .., c0n−1 } y C = {c01 , .., c0n−2 , c0n−1 0, c0n−1 1}.
Veamos qué relación existe entre las longitudes media de ambos:
n−2
X
L(C) = pk L0k + (L0n−1 + 1)pn−1 + (L0n−1 + 1)pn =
k=1
n−1
X
= p0k L0k + pn−1 + pn = L(C 0 ) + pn−1 + pn .
k=1
= L(C ∗ ) − (pn−1 + pn ).
Vemos, pues, que L(C ∗ ) = L(C ∗0 ) + pn−1 + pn . Ahora usamos el hecho de que
C 0 es óptimo para (S 0 , P 0 ) y obtenemos la desigualdad
Es decir, la cantidad L(C 0 ) + pn−1 + pn es una cota inferior para las longi-
tudes media de los códigos óptimos para (S, P ). Como C es instantáneo y su
longitud media es igual a dicha cota, se deduce que C es óptimo. ¤
ai a a2 a3 a4 a a6 a7
1 5
P(ai ) 0.25 0.15 0.15 0.15 0.1 0.1 0.1
0 1 0 1 0 1
0.25 0.2
0.3 1
1 0 0
0.55 0.45
0 1
ai a a2 a3 a4 a a 6 a7
1 5
P(ai ) 0.25 0.15 0.15 0.15 0.1 0.1 0.1
0 1 2 0 1 2
0.45 0.3
1
2 0
El código óptimo obtenido es
a i
a1 a a 3 a 4 a5
2
p i
0.2 0.4 0.2 0.1 0.1
0 1
0 1 0.2
0.4
1 0
0 0.6
1
2.5. CÓDIGOS DE HUFFMAN CON VARIANZA MÍNIMA 21
Pero ahora vamos a proceder de esta otra forma. En cada paso, siempre
que sea posible, no escogemos el mensaje obtenido por reunificación de los
dos mensajes con menor probabilidad del paso anterior. En nuestro ejemplo,
el primer paso conduce a la siguiente situación
ai a1 a2 a 3 a4 a5
pi 0.2 0.4 0.2 0.1 0.1
0 1
0.2
Vemos que hay 3 mensajes con probabilidad 0.2. Descartamos el reunifi-
cado y escogemos a1 y a3 para desarrollar el siguiente paso, resultando
ai a1 a2 a 3 a4 a5
pi 0.2 0.4 0.2 0.1 0.1
0 1 0 1
0.4 0.2
De nuevo podemos evitar escoger el mensaje reunificado que se acaba de
formar y resulta
22CAPÍTULO 2. CÓDIGOS INSTANTÁNEOS. EL ALGORITMO DE HUFFMAN
ai a1 a2 a 3 a4 a5
p i
0.2 0.4 0.2 0.1 0.1
0 1 0 1
0.4 0.2
0 1
0.6
Finalmente, obtenemos
ai a1 a2 a 3 a4 a5
p i
0.2 0.4 0.2 0.1 0.1
0 1 0 1
0.4 0.2
0 1
0.6
1 0
2.7. Ejercicios
1. Determinar cuáles de los siguientes códigos son de decodificación única:
a) C = {0, 10, 11}, b) C = {0, 01, 11}, c) C = {0, 01, 10} y
d) C = {110, 11, 100, 00, 10}.
{a1 , a2 , a3 , a4 , a5 }
con probabilidades:
1/3, 1/5, 1/5, 2/15, 2/15.
4. Se considera la fuente {a1 , .., a5 } con probabilidades: 0.4, 0.3, 0.1, 0.1, 0.1.
Enontrar un código óptimo con alfabeto ternario.