Anda di halaman 1dari 39

Rafael Molina Tema 3: Codificacin Huffman 1

Tema 3: Codificacin
Huffman
Rafael Molina
Depto. Ciencias de la Computacin
e Inteligencia Artificial
Universidad de Granada
Rafael Molina Tema 3: Codificacin Huffman 2
Objetivos del tema
El algoritmo del cdigo de Huffman
Cdigos de Huffman de mnima varianza
Cdigos de Huffman Adaptativos
Procedimiento de codificacin
Procedimiento de decodificacin
Procedimiento de actualizacin
(*) Cdigos de Golomb
(*)Cdigo Tunstall
Aplicaciones del cdigo de Huffman
Resumen
Bibliografa
Apndice: Longitud del cdigo de Huffman y cdigo de
Huffman extendido (*) Estas secciones son ilustrativas, no entran en el examen
Contenidos
Rafael Molina Tema 3: Codificacin Huffman 3
III.1 Objetivos del tema
En este tema vamos a describir un algoritmo de codificacin
muy conocido: el cdigo de Huffman. Primero supondremos
que es conocida la distribucin de probabilidad de la fuente
y luego construiremos el cdigo cuando dichas
probabilidades no son conocidas.
A continuacin veremos algunos esquemas de codificacin,
en algn sentido, similares al cdigo de Huffman.
Finalmente veremos algunos ejemplos de aplicacin a
compresin de imgenes, sonido y texto.
Rafael Molina Tema 3: Codificacin Huffman 4
III.2 El algoritmo del cdigo de
Huffman.
La codificacin usando el mtodo de Huffman (cdigo
Huffman) es un cdigo prefijo ptimo para un conjunto
dado de probabilidades.
Puede alcanzar la entropa, aunque no lo hace siempre.
S es ptimo entre los cdigos prefijo.
Rafael Molina Tema 3: Codificacin Huffman 5
El cdigo de Huffman est basado en dos propiedades de los
cdigos prefijo ptimos:
1. En un cdigo prefijo ptimo, los smbolos ms frecuentes
los que tienen mayor probabilidad- tienen palabras del
cdigo ms cortas que las palabras menos frecuentes.
2. En un cdigo prefijo ptimo, los dos smbolos que ocurren
con menos frecuencia tendrn la misma longitud.
Demostracin de que estas condiciones las cumple un cdigo
prefijo ptimo:
La primera condicin es obvia. El nmero medio de bits por
smbolo sera mayor si esta condicin no se cumpliese.
Rafael Molina Tema 3: Codificacin Huffman 6
Para probar la segunda condicin usaremos reduccin al
absurdo.
Supongamos que existe un cdigo prefijo ptimo, C, en el
que los dos smbolos menos probables no tienen la misma
longitud.
Sean P1 y P2 las correspondientes palabras del cdigo y
supongamos que long(P1)=k y long(P2)=n con k<n.
Al ser un cdigo prefijo, P1 no puede ser prefijo de P2. Por
tanto podemos suprimir los n-k ltimos dgitos de P2 y tener
an dos cdigos distintos. Sea C el nuevo cdigo, sigue
siendo prefijo?
Rafael Molina Tema 3: Codificacin Huffman 7
Como estos smbolos son los menos probables ninguna otra
palabra puede ser ms larga que estas dos y por tanto no
hay peligro de que al hacer ms corta esta palabra del cdigo
(la de P2) se convierta en prefijo de ninguna otra. Por tanto,
C sigue siendo prefijo.
Hemos creado un nuevo cdigo, C, que hace que C no sea
ptimo, lo que contradice la hiptesis inicial sobre C.
Para construir el cdigo de Huffman le aadimos la siguiente
condicin a las dos propiedades vistas de los cdigos prefijo
ptimos:
Si u y v son los dos smbolos menos probables en el alfabeto,
si la codificacin de u es m*0, la de v ser m*1. Donde m es
una hilera de ceros y unos y * denota concatenacin.
Rafael Molina Tema 3: Codificacin Huffman 8
Genera el cdigo de Huffman
correspondiente a las
siguientes probabilidades
1. Ordena los smbolos de ms probable a menos probable,
2. Comienza a construir un rbol por las hojas combinando
los dos smbolos menos probables,
3. Itera el procedimiento
Algoritmo del cdigo de Huffman
P( )=0.5
P( )=0.4
P( )=0.09
P( E )=0.01
Rafael Molina Tema 3: Codificacin Huffman 9
E
0.01
0.09
0.4
0.5
1
0
0.1
0
1
0.5
0
1
1.0
Cul es la longitud
media del cdigo?
Cul es la entropa de
la fuente?
probabilidades
Probabilidades
acumuladas
Nota: asignamos 1 a la rama menos probable
E
0
10
110
111
Cdigo Smbolo Cdigo Smbolo
Rafael Molina Tema 3: Codificacin Huffman 10
D
0.1
0.3
0.3
0.3
1
0
0.4
0.6
1
0
1
0
1.0
C
B
A
A 00 B 01 C 10 D 11
probabilidades
Otro ejemplo
Rafael Molina Tema 3: Codificacin Huffman 11
E
0.1
0.1
0.2
0.2
1
0
0.2
0
1
0.4
probabilidades
D
C
A
B 0.4
0.6
0
1
0
1
1.0
B 1
A 01
C 000
D 0010
E 0011
Para decodificar una secuencia de palabras slo tenemos que
recorrer el rbol del cdigo prefijo correspondiente al cdigo
Huffman como vimos en el captulo anterior.
Otro ejemplo
Rafael Molina Tema 3: Codificacin Huffman 12
III.2.1 Cdigos de Huffman de mnima
varianza
Consideremos el cdigo de Huffman del ejemplo anterior. El
nmero medio de bits por smbolo es
L=0.4x1+0.2x2+0.2x3+0.1x4+0.1x4=2.2 bits/smbolo
Supongamos que queremos transmitir 10000 smbolos/sg.
Con una capacidad de transmisin de 22000 bits/sg el canal
ira en media bien. Sin embargo, si tenemos que transmitir
muchas veces seguidas los smbolos D o E podemos necesitar
un buffer mucho mayor.
Lo mejor sera que, manteniendo la misma longitud media,
pudisemos disear un cdigo de Huffman con menor
varianza en la longitud de la codificacin de cada smbolo.
Rafael Molina Tema 3: Codificacin Huffman 13
E
0.1
0.1
0.2
0.2
1
0
0.2
0
1 0.4
probabilidades
D
C
A
B 0.4
B 00
A 10
C 11
D 010
E 011
0
1
1.0
Para disminuir la varianza colocamos, en caso de empate en
las probabilidades de los nodos, los nodos ya utilizados lo
ms alto posible procurando utilizarlos lo ms tarde posible.
Retomemos el ejemplo de la seccin anterior.
0.6
0
1
Rafael Molina Tema 3: Codificacin Huffman 14
III.3 Cdigo de Huffman adaptativo
El cdigo de Huffman necesita conocer la probabilidad de
aparicin de cada smbolo.
Para la construccin del rbol adaptativamente, veamos a
continuacin qu propiedades caracterizan a un rbol binario
para que sea el correspondiente a un cdigo de Huffman.
1. Para tener estas probabilidades podemos leer los datos
para obtenerlas y luego codificar los smbolos usando el
cdigo de Huffman para dichas probabilidades,
2. o bien podemos ir construyndolo (adaptativamente)
mientras vamos leyendo los smbolos. Esta es la base del
cdigo Huffman adaptativo.
Rafael Molina Tema 3: Codificacin Huffman 15
Consideremos un rbol binario correspondiente a un alfabeto de
tamao n en el que los smbolos del alfabeto son las hojas.
Entonces, el nmero de nodos del rbol es 2n-1 (prubalo por
induccin).
A cada nodo del rbol binario le vamos a asignar dos
campos: Nmero del nodo y peso del nodo.
El nmero de nodo es un nmero nico asignado a cada nodo
del rbol entre 1 y 2n-1. Los nmeros los notaremos y
1
,,y
2n-1
.
El peso de un nodo hoja es simplemente el nmero de veces
que aparece el smbolo correspondiente y el de uno interno la
suma de los pesos de sus dos hijos. Los pesos los notaremos
x
1
,,x
2n-1
.
Rafael Molina Tema 3: Codificacin Huffman 16
Puede probarse que:
Si al asignar nmeros a los nodos comenzando por el uno y
recorriendo el rbol por niveles (asignamos, de izquierda a
derecha en cada nivel y de las hojas (abajo) a la raz
(arriba) los pesos de los nodos quedan ordenados en un
orden no decreciente
El rbol obtenido es un rbol binario correspondiente a un
cdigo de Huffman para dichos smbolos con las
probabilidades de cada nodo hoja igual a su peso dividido
por la suma de los pesos.
La propiedad anterior recibe el nombre de sibling property o
node number invariant.
Rafael Molina Tema 3: Codificacin Huffman 17
En el ejemplo de la derecha:
Entre parntesis los pesos de
cada nodo.
(16)
(7) (9)
(3) (4)
(2) (2) (1) (2)
1 2
7 8
5 6
9
3 4
Dentro de los cuadrados el
nmero asignado a cada
nodo.
Por tanto, este rbol es el
correspondiente al cdigo de
Huffman para estos smbolos
con las probabilidades que se
obtienen a partir del nmero de
veces que ha aparecido cada
smbolo dividido por el nmero
de smbolo ledos.
Rafael Molina Tema 3: Codificacin Huffman 18
En el cdigo Huffman adaptativo ni el transmisor ni el
receptor conocen al principio las probabilidades de los
smbolos. Por eso:
1. Codificador y decodificar comienzan con un rbol con un
nodo nico que corresponde a todos los smbolos no
transmitidos (NYT) y que tiene peso cero.
2. Mientras progresa la transmisin se aadirn nodos al
rbol correspondientes a smbolos que aparezcan por
primera vez, se modificarn los pesos (tanto si el
smbolo es nuevo como si es ya existente) y se
actualizar el rbol para que siga cumpliendo the sibling
property (siga siendo de Huffman).
Rafael Molina Tema 3: Codificacin Huffman 19
El algoritmo de Huffman adaptativo consta de los siguientes
elementos:
1. Inicializacin (la misma para el codificador y
decodificador).
Antes de describir estas partes comentaremos brevemente
sobre la codificacin de los smbolos:
2 Algoritmo de codificacin.
3. Algoritmo de decodificacin.
4. Proceso de actualizacin del rbol para que mantenga
the sibling property.
Rafael Molina Tema 3: Codificacin Huffman 20
Codificacin de un smbolo que aparece por primera
vez:
Salvo que sea el primero de todos lo smbolos de la
secuencia, la codificacin de un smbolo que aparece por
primera vez consta de la codificacin que proporciona el
rbol del nodo NYT seguido de un cdigo fijo para el smbolo
que deben conocer codificador y decodificador
En el caso en que sea el primer smbolo que aparece en la
secuencia no necesitamos transmitir el cdigo de NYT.
Si el smbolo ya ha aparecido
Utilizamos la codificacin que proporciona el rbol que
vamos construyendo.
Rafael Molina Tema 3: Codificacin Huffman 21
Inicializacin del cdigo de Huffman adaptativo
(tanto para el codificador como para el decodificador
1. Nuestro rbol ha de codificar n+1 smbolos incluyendo
el correspondiente a NYT,
2. Necesitamos por tanto 2(n+1)-1=2n+1 nmeros para
los nodos,
3. El rbol de Huffman inicial tiene un nodo nico:
0
NYT
2n+1
Nmero
del nodo
peso
Rafael Molina Tema 3: Codificacin Huffman 22
1. Si encontramos un smbolo nuevo (ver nota) entonces
generar el cdigo del nodo NYT seguido del cdigo fijo
(ver nota) del smbolo. Aadir el nuevo smbolo al
rbol,
2. Si el smbolo ya est presente, generar su cdigo
usando el rbol,
3. Actualizar el rbol para que siga conservando the
sibling property.
Nota: Recordemos que para el primer smbolo no hace falta transmitir el
cdigo de NYT. El cdigo fijo es conocido al principio por codificador y
decodificador.
Algoritmo de codificacin para el cdigo
Huffman adaptativo
Rafael Molina Tema 3: Codificacin Huffman 23
1. Decodificar el smbolo usando el rbol actual,
2. Si encontramos el nodo NYT, usar el cdigo fijo para
decodificar el smbolo que viene a continuacin. Aadir
el nuevo smbolo al rbol,
3. Actualizar el rbol para que siga conservando the
sibling property.
Nota: recordar, de nuevo, que el primer smbolo no va precedido por el
cdigo de NYT
Algoritmo de decodificacin para el cdigo
Huffman adaptativo
Rafael Molina Tema 3: Codificacin Huffman 24
1. Sea y la hoja (smbolo) con peso x,
2. Si y es la raz, aumentar x en 1 y salir
3. Intercambiar y con el nodo con el nmero mayor que
tenga el mismo peso que l (salvo que sea su padre)
4. Aumentar x en 1
5. Sea y el padre que tiene su peso x (el que sea, no el
definido en 4) ir al paso 2 del algoritmo
Actualizacin del rbol para el cdigo
Huffman adaptativo
Rafael Molina Tema 3: Codificacin Huffman 25
Ejemplo
Consideremos el alfabeto A={a,b,c,d} y realicemos la
codificacin de la secuencia
aabcdad
Primero vemos el nmero de nodos que necesitaremos
Nodos=2*4+1=9
Los cdigos de longitud fija que usamos son
a 000 b 001 c 010 d 011
Rafael Molina Tema 3: Codificacin Huffman 26
aabcdad en A={a,b,c,d}
salida=000
NYT
9
0
7
a
8
0
0
Paso 1 del
algoritmo de
codificacin
0
NYT
9
Inicializacin
0
1
Rafael Molina Tema 3: Codificacin Huffman 27
NYT
9
0
7
a
8
0
1
Paso 3 del algoritmo de codificacin (actualizacin)
Paso 4 dentro del
algoritmo de
actualizacin
NYT
9
0
7
a
8
1
1
Paso 2 dentro del
algoritmo de
actualizacin
0 1
0 1
Rafael Molina Tema 3: Codificacin Huffman 28
aabcdad
salida=0001
NYT
9
0
7
a
8
1
1
Paso 2 del
algoritmo de
codificacin
Tenemos
NYT
9
0
7
a
8
1
1
salida=000
0 1
0 1
Rafael Molina Tema 3: Codificacin Huffman 29
NYT
9
0
7
a
8
1
2
Paso 3 del algoritmo de codificacin (actualizacin)
Paso 4 dentro del
algoritmo de
actualizacin
NYT
9
0
7
a
8
2
2
Paso 2 dentro del
algoritmo de
actualizacin
0 1
0 1
Rafael Molina Tema 3: Codificacin Huffman 30
aabcdad
Tenemos
NYT
9
0
7
a
8
2
2
salida=0001
0 1
1
salida=00010001
9
7
a
8
2
2
Paso 1 del
algoritmo de
codificacin
Cdigo
de b
Cdigo
de NYT
NYT
0
0
0
6 5
b
0
0 1
Rafael Molina Tema 3: Codificacin Huffman 31
6
1
9
7
a
8
2
2
NYT
0
0
1
5
b
0
0 1
5
a
1
9
7 8
2
2
NYT
0
1
1
6
b
0
0 1
Paso 3 del algoritmo
de codificacin
(actualizacin)
a
1
9
7 8
3
2
NYT
0
1
1
6
b
0
0 1
5
Rafael Molina Tema 3: Codificacin Huffman 32
a
1
9
7 8
3
2
NYT
0
1
1
6
b
0
0 1
5
aabcdad
Tenemos
salida=00010001
a
1
9
7 8
3
2
NYT
1
1
6
b
0
0 1
5
salida=0001000100010
0
0
0
4 3
c
Cdigo
de NYT
c
Algoritmo de codificacin
sin adaptacin del rbol
0 1
Rafael Molina Tema 3: Codificacin Huffman 33
adaptacin
del rbol
a
1
9
7 8
3
2
NYT
1
1
6
b
0
0 1
5
0 1
0
4 3
c
0 1
a
1
9
7 8
3
2
NYT
1
1 6
b
0
0 1
5
0
1
1
4 3
c
0 1
a
1
9
7 8
3
2
NYT
2
1
6
b
0
0 1
5
0 1
1
4 3
c
0 1
a
1
9
7 8
4
2
NYT
2
1
6
b
0
0 1
5
0 1
1
4 3
c
0 1
Rafael Molina Tema 3: Codificacin Huffman 34
aabcdad
Tenemos
a
1
9
7 8
4
2
NYT
2
1
6
b
0
0 1
5
0 1
1
4 3
c
0 1
salida=0001000100010
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
1
4 3
c
salida=0001000100010000011
NYT
0 0
2 1
d
0
Algoritmo de codificacin
sin adaptacin del rbol
d
NYT
0
0
1
1
Rafael Molina Tema 3: Codificacin Huffman 35
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
1
4 3
c
NYT
0 1
2 1
d
0
0
0
1
1
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
1
4 3
c
NYT
0 1
2 1
d
1
0
0
1
1
adaptacin
del rbol
Rafael Molina Tema 3: Codificacin Huffman 36
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
1
4 3
c
NYT
0 1
2 1
d
1
0
0
1
1
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
1
4 3
c
NYT
0 1
2 1
d
1
0
0
1
1
adaptacin
del rbol
CAMBIO DE ORDEN
Rafael Molina Tema 3: Codificacin Huffman 37
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
1
adaptacin
del rbol
a
1
9
7 8
4
2
2
1
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
1
Rafael Molina Tema 3: Codificacin Huffman 38
adaptacin
del rbol
1
1
9
7
1
8
4
2
2
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
1
1
9
7
1
8
4
2
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
CAMBIO DE ORDEN
Rafael Molina Tema 3: Codificacin Huffman 39
adaptacin
del rbol
1
1
9
7
1
8
5
2
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
Rafael Molina Tema 3: Codificacin Huffman 40
1
1
9
7
1
8
5
2
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
aabcdad
Tenemos
salida=0001000100010000011
1
1
9
7
1
8
5
2
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
Algoritmo de codificacin sin
adaptacin del rbol
salida=00010001000100000110
Rafael Molina Tema 3: Codificacin Huffman 41
1
1
9
7
1
8
5
3
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
1
1
9
7
1
8
6
3
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
adaptacin
del rbol
Rafael Molina Tema 3: Codificacin Huffman 42
1
1
9
7
1
8
6
3
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
aabcdad
Tenemos
salida=
00010001000100000110
Algoritmo de codificacin sin
adaptacin del rbol
salida=
000100010001000001101101
1
1
9
7
1
8
6
3
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
d
Rafael Molina Tema 3: Codificacin Huffman 43
1
1
9
7
1
8
6
3
3
6
b
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
d
1
0
0
1
a
1
1
9
7
1
8
6
3
3
6
d
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
b
1
0
0
1
a
Observar cambio
Rafael Molina Tema 3: Codificacin Huffman 44
2
1
9
7
1
8
6
3
3
6
d
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
b
1
0
0
1
a
2
1
9
7
1
8
6
3
3
6
d
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
b
1
0
0
1
a
Rafael Molina Tema 3: Codificacin Huffman 45
2
1
9
7
1
8
6
3
4
6
d
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
b
1
0
0
1
a
2
1
9
7
1
8
7
3
4
6
d
0
0 1
5
1
2
4 3
c
NYT
0 1
2 1
b
1
0
0
1
a
Rafael Molina Tema 3: Codificacin Huffman 46
Ejercicio:
Usando el cdigo fijo
a=000, b=001, c=010, d=011
Decodificar la secuencia 00110000 usando el cdigo de
Huffman adaptativo.
Aunque el cdigo de Huffman es uno de los mtodos de
codificacin de longitud de palabra variable ms
conocidos, existen otros mtodos algo menos conocidos
pero tambin muy tiles. En particular los mtodos de
Golomb-Rice y Tunstall que veremos a continuacin.
Rafael Molina Tema 3: Codificacin Huffman 47
III.4 Cdigo de Golomb
Consideremos un suceso A que tiene probabilidad p y su
complementario A
c
que tiene probabilidad q=1-p (obviamente
p+q=1).
Queremos codificar el nmero de veces (racha=run length)
que aparece A antes de que aparezca A
c
.
Suponemos que las realizaciones son independientes.
Observa que si p es prximo a uno esperamos que aparezca
muchas veces el suceso A antes de que aparezca un A
c
.
Rafael Molina Tema 3: Codificacin Huffman 48
Ejemplos de estos modelos son:
1. A es que salga cara al lanzar una moneda y A
c
es
obviamente que salga cruz.
2. En el problema del agente 00111 de Golomb (ver material
adicional) el suceso A
c
es que salga el cero en la ruleta y A
es que no salga (la ruleta tiene los nmeros del 0 al 36).
3. Puntos en blanco y negro como podra ser el contenido de
una hoja.
Rafael Molina Tema 3: Codificacin Huffman 49
1. Observa que para la ruleta P(A)=36/37 y P(A
c
)=1/37.
2. En el caso de la moneda (si no est sesgada)
P(A)=P(A
c
)=1/2.
3. En el caso de hojas en blanco y negro se podra estimar p.
Los fabricantes de impresoras suponen p=0.05
Lo que queremos codificar son las realizaciones de la variable
aleatoria N definida por
N= nmero de veces que aparece A antes de que aparezca
A
c
.
Esta variable tiene la siguiente distribucin de probabilidad
P(N=n)=p
n
q n=0,1,2,.
Rafael Molina Tema 3: Codificacin Huffman 50
Una posible codificacin sera:
Cada vez que aparezca el suceso A lo codificamos con un uno
y cuando se produzca el suceso A
c
lo codificamos con un
cero.
De esta forma el valor n de la variable aleatoria N se codifica
mediante n unos seguidos de un cero. Es decir,
0 0
1 10
2 110
3 1110
N cdigo
. .
. .
Este cdigo recibe el nombre de
cdigo unario.
Cul es el nmero medio de bits que
este cdigo, C, usa para codificar la
variable N?
Rafael Molina Tema 3: Codificacin Huffman 51
( )
p
p
pq
p
q
p deriv pq
p
q
np qp
p
q
np q p q qp n N C
n
n
n
n
n
n
n
n n
n
p

=
|
.
|

\
|
+

= +

=
+ = + =
_ _
_ _ _

=
1
1
1
1
1
1 1
) 1 ( ) (
2
0 0
1
0 0 0
Observa que si p est muy prximo a uno C
p
(N) es muy
grande.
Cunto vale la entropa de la variable aleatoria N en
funcin de p?.
Recuerda que q=1-p
Rafael Molina Tema 3: Codificacin Huffman 52
( ) ( )
( )
( )
( ) p p q q
p
p
p
p
q
p
p pq
p
q q
p derivada p pq
p
q q
np p pq
p
q q
np p q p q q qp p q N H
n
n
n
n
n
n
n
n n
n
n
p
log log
1
1
) log(
1
log
1
1
) log(
1
) log(
) log(
1
) log(
) log(
1
) log(
log ) log( log ) (
2
0
0
1
0 0 0
+

=
|
.
|

\
|

=
= =
_
_
_ _ _

=
Recuerda que q=1-p
Rafael Molina Tema 3: Codificacin Huffman 53
Observa que para p grande deberamos ser capaces de mejorar el cdigo
unario.
Sin embargo, para p=0.5, C
p
(N) H
p
(N)=0 y el cdigo unario es el mejor
que podemos utlizar.
Representacin grfica de C
p
(N) H
p
(N)
Rafael Molina Tema 3: Codificacin Huffman 54
Veamos la idea del cdigo de Golomb intuitivamente.
Supongamos que tenemos una racha de apariciones de A de
longitud n
1
y otra racha de apariciones de A de longitud
n2(>n
1
) cuya probabilidad es la mitad.
Cmo estn relacionados n
2
y n
1
?.
p n p n
p n n
q q n N P
q qp n N P
log 1 log
1
log
2
1 1
2 2
2 2 5 . 0 ) ( 5 . 0
2 ) (
+
= = = =
= = =
de donde
p n p n log 1 log
1 2
+ =
o
|
|
.
|

\
|
+ = =
p
n
p
n n
log
1
log
1
1 1 2
Muy importante
Rafael Molina Tema 3: Codificacin Huffman 55
Intutivamente, nos gustara que el cdigo de n
2
fuese un bit
ms largo que el de n
1
. Esto es lo que consigue el cdigo de
Golomb.
Antes un poco de notacin

(

(
4 5 . 3
3 5 . 3
arriba por x a prximo ms entero
abajo por x a prximo ms entero
=
=
=
=
x
x
Continuemos con el cdigo de Golomb. Sea
(
(
(

=
p
w
log
1
Rafael Molina Tema 3: Codificacin Huffman 56
Qw n R y
w
n
Q =
(

=
Para cada n sean
En otras palabras Q es el cociente y R es el resto de la
divisin de n por w
(Observa que si n=n+w entonces Q=Q+1)
La codificacin de Golomb para n consiste en:
1. un prefijo unario (para el cociente, es decir para Q),
2. y un sufijo binario (para el resto, R) usando
(
bits log w
*
* Este cdigo va a ser mejorado despus
Rafael Molina Tema 3: Codificacin Huffman 57
Supongamos que p=2^(-1/4) ~ 0.8409, entonces
(
2 log , 4 = = w w
N Q R Representacin
0 0 0 000
1 0 1 001
2 0 2 010
3 0 3 011
4 1 0 1000
5 1 1 1001
6 1 2 1010
Rafael Molina Tema 3: Codificacin Huffman 58
Supongamos que p=2^(-1/5) , entonces
(
3 log , 5 = = w w
N Q R Representacin
0 0 0 0000
1 0 1 0001
2 0 2 0010
3 0 3 0011
4 0 4 0100
5 1 0 10000
6 1 1 10001
Rafael Molina Tema 3: Codificacin Huffman 59
La parte sufijo del cdigo es mejorable cuando w no sea una
potencia de 2, si usamos la siguiente representacin de
longitud variable:
Sea R {0,1,,w-1}
(
(
cdigos 2 M sobran nos bits logw Usando
logw
w =

bits logw con binaria cin representa usamos M R Si <
(
R de bits log en cin representa la usamos R Si M w M + >
Rafael Molina Tema 3: Codificacin Huffman 60
1 0
0
1
w=2
0
0
1
2 1
0 1
w=3
Resto R Representacin
0 0
1 1
Resto R Representacin
0 0
1 10
2 11
Ejemplos:
Los arcos determinan el cdigo
Los nodos contienen el resto
Rafael Molina Tema 3: Codificacin Huffman 61
4
3
0
1
0
1
2
0
1
w=5
Resto R Representacin
0 00
1 01
2 10
3 110
4 111
1 0
0
1
0
1
3 2
0
1
w=4
Resto R Representacin
0 00
1 01
2 10
3 11
1
0
0
1
Ms ejemplos de la representacin de la parte sufijo
Rafael Molina Tema 3: Codificacin Huffman 62
Supongamos que p=2
-1/5
. Entonces
(
3 log , 5 = = w w
N Q R Representacin
0 0 0 000
1 0 1 001
2 0 2 010
3 0 3 0110
4 0 4 0111
5 1 0 1000
6 1 1 1001
Otro ejemplo de cdigo Gollub:
C

D
I
G
O
G
O
L
L
U
B
Rafael Molina Tema 3: Codificacin Huffman 63
III.5 Cdigo Tunstall
Es un cdigo de longitud fija en el que cada palabra del cdigo puede representar
un nmero diferente de letras.
Supongamos que tenemos inicialmente m smbolos y
queremos usar como salida representaciones de longitud fija
con n bits, siendo 2
n
>m. Suponemos que las realizaciones de
dichos smbolos son independientes. Construccin del rbol:
Formar un rbol con una raz y m hijos con arcos
etiquetados con los smbolos del alfabeto,
Si el nmero de hojas del rbol, l, cumple l+(m-1)< 2
n
seguir, en caso contrario parar.*
Encontrar la hoja con mayor probabilidad (la probabilidad es
el producto de las probabilidades de los smbolos del camino
de la raz a las hojas) y expandirla para que tenga m hijos.
Volver al paso anterior,
Cdigo de Tunstall
Rafael Molina Tema 3: Codificacin Huffman 64
*Justificacin de la condicin de parada:
Veamos cuantos hojas tiene el rbol,
Si en un instante tiene l hojas, para expandir le quitamos una y
de esa una salen m. Por tanto una vez realizada la expansin
tenemos l-1+m que necesitaremos que sea menor que 2
n
ya
que necesitamos dejarnos al menos un cdigo libre como ya
veremos.
Una vez construido el rbol le asignamos un cdigo de
longitud n a cada una de las hojas.
Rafael Molina Tema 3: Codificacin Huffman 65
Supongamos que P(A)=0.6, P(B)=0.3 y P(C)=0.1 y n=3.
Por tanto, deseamos generar una representacin de longitud
fija 3.
Paso 1
A B C
0.6 0.3 0.1
Rafael Molina Tema 3: Codificacin Huffman 66
l=3, 3+2=5, 5<8 Seguimos
Paso 2
Paso 3
A B C
A B C
0.3 0.1
0.36 0.18 0.06
Rafael Molina Tema 3: Codificacin Huffman 67
l=5, 5+2=7, 7<8 Seguimos
Paso 2
Paso 3
A B C
A B C
A B C
Rafael Molina Tema 3: Codificacin Huffman 68
L=7, 7+2=9, 9 8, Salimos
Paso 2
Codificacin final (hay
varias opciones)
A B C
A B C
A B C
000 001 010
011 100
101 110
Observa que
tenemos libre la
palabra del cdigo
111
Rafael Molina Tema 3: Codificacin Huffman 69
El cdigo de Tunstall ha generado la siguiente representacin
Entrada Salida
AAA 000
AAB 001
AAC 010
AB 011
AC 100
B 101
C 110
Qu ocurre si queremos
codificar la secuencia AA?.
AA no tiene representacin.
Para codificar el AA enviamos
el cdigo no utilizado (111) y
un cdigo fijo para AA.
Generalmente, si hay k nodos
internos en el rbol
necesitaremos k-1 cdigos
fijos. En nuestro problema A
y AA.
Rafael Molina Tema 3: Codificacin Huffman 70
Otro ejemplo. Supongamos P(A)=0.9 y P(B)=0.1 y
usamos n=2.
El rbol que construiramos sera
A B
A B
00 01
10
Y dejaramos el 11 para enviar el cdigo de A
Entrada Salida
AA 00
AB 01
B 10
Rafael Molina Tema 3: Codificacin Huffman 71
Si ussemos las cuatro palabras tendramos
y no podramos enviar cdigo para A
Entrada Salida
AAA 00
AAB 01
AB 10
B 11
A B
A B
10
11
A B
00 01
Rafael Molina Tema 3: Codificacin Huffman 72
Entrada Salida
AAA 000
AAB 001
AAC 010
AB 011
AC 100
B 101
C 110
Problema: considera la tabla en la que el cdigo 111 es
utilizado para anunciar que a continuacin viene el cdigo de
A o AA.
Qu proceso seguiramos
para codificar las secuencias
CABBAAC
CBBACA
?
Rafael Molina Tema 3: Codificacin Huffman 73
III.6 Aplicaciones del cdigo de Huffman
En las clases de prcticas se estudiarn las siguientes
aplicaciones:
Imgenes: Usaremos imgenes de niveles de gris, es decir,
que en cada punto toman un valor entre 0 y 255. Estimaremos
la probabilidad de ocurrencia de cada nivel de gris usando el
histograma y aplicaremos Huffman. El modelo ser por tanto
no adaptativo.
Como los valores de los pxeles estn muy correlados
codificaremos la diferencia entre un pxel y el anterior usando
Huffman, veremos que mejoramos el nivel de compresin.
Tambin usaremos imgenes binarias y cdigos de Huffman
adaptativos
Rafael Molina Tema 3: Codificacin Huffman 74
Texto: Usaremos diferentes tipos de texto y aplicaremos
Huffman habiendo calculado antes las probabilidades de
cada letra a partir del texto.
Eliminar la correlacin aqu es ms complicado y veremos
como hacerlo en captulos posteriores.
Sonido: Cada canal estreo se muestrea a 44.1 kHz y
utiliza una representacin de 16 bits. Aunque no vamos a
construir el cdigo Huffman (tendra 2
16
entradas),
calcularemos la entropa y por tanto una estimacin de la
mejor compresin que podemos alcanzar. Podemos
tambin eliminar (o disminuir) la correlacin entre los
datos y volver a calcular la entropa y por tanto una
estimacin de la compresin a alcanzar con este modelo.
Rafael Molina Tema 3: Codificacin Huffman 75
III.7 Resumen del tema
1. Cdigo de Huffman, no adaptativo y adaptativo,
2. Cdigos unarios y de Golomb,
3. Cdigos de Tunstall,
4. Aplicaciones.
Rafael Molina Tema 3: Codificacin Huffman 76
III.8 Bibliografa
K. Sayood, Introduction to Data Compression, Morgan and
Kaufmann, 2000.
Material adicional de la asignatura
G. Langdon, Data Compression, Universidad de California, 1999. (langdon_Run-
Length_Encodings.pdf).
Roque Marn,Compresores estadsticos, Universidad de Murcia,
(00_compresores_estadsticos_univ.murcia.pdf).
Notas sobre el cdigo de Golomb (Golomb_Notes.pdf).
Otra presentacin sobre compresores estadsticos,
(00_compresores_estadsticos_II.pdf).
Temas 2, 3 y 4 del curso de compresin de datos impartido en Stony Brook
University (NY, USA), (tema[2,3,4]_stony.pdf).
Tema 3 del curso de compresin de datos impartido en Chalmers University of
Technology (Suecia), curso 2003-2004. (tema3_chalmers.pdf).
S. W. Golomb, Run-Length Encodings, IEEE Trans. On Information Theory, IT-
12: 399-401, 1966.
D.A. Huffman, A method for the construction of minimum redundancy codes,
Proceedings of the IRE, 40:1098-1101, 1951.
Rafael Molina Tema 3: Codificacin Huffman 77
Apndice: longitud de los cdigos de
Huffman y cdigos de Huffman extendidos
Dado un cdigo de Huffman, puede probarse que, su
longitud media n cumple
H(S)

n < H(S) + 1 ( ) ( )
Primer Teorema de Shannon o Teorema Fundamental de la
Codificacin sin Ruido:
Dada una fuente S = {x1, ... xm} y un alfabeto binario,
existe al menos un cdigo prefijo C cuya longitud media
cumple
siendo cualquier nmero real arbitrariamente pequeo.
c + < ) (S H n
Rafael Molina Tema 3: Codificacin Huffman 78
1 ) ( ) ( + s s
q
q
q
S H n S H
1 ) ( ) ( + s s S H q n q S H q
q
S H n S H
1
) ( ) ( + s s
La demostracin del teorema es la siguiente:
Supongamos que codificamos bloques de q mensajes y
seguimos suponiendo que son independientes, entonces
tendremos (observa que la fuente es ahora S
q
)
Reeescribiendo esta ecuacin en funcin de la entropa de la
fuente original tendremos
dividiendo por q obtendremos
Basta con elegir un tamao de bloque q suficientemente
grande para conseguir 1/q < para que se cumpla lo afirmado
por el teorema.

Anda mungkin juga menyukai