Documentos de Académico
Documentos de Profesional
Documentos de Cultura
T3 Codigo de Huffman
T3 Codigo de Huffman
Huffman
Rafael Molina
Depto. Ciencias de la Computación
e Inteligencia Artificial
Universidad de Granada
3. Itera el procedimiento
P( )=0.5
Genera el código de Huffman
correspondiente a las P( )=0.4
siguientes probabilidades P( )=0.09
P( E )=0.01
Rafael Molina Tema 3: Codificación Huffman 8
probabilidades
0
0.5
0
0.4 1.0
Probabilidades
acumuladas
1
0
0.09 0.5
1
1 0.1
E 0.01
Símbolo Código Símbolo Código ¿Cuál es la longitud
0 110 media del código?
¿Cuál es la entropía de
10 E 111 la fuente?
Nota: asignamos 1 a la rama menos probable
Rafael Molina Tema 3: Codificación Huffman 9
probabilidades
Otro ejemplo
0
A 0.3 0
1 0.6
B 0.3
0 1.0
C 0.3 1
1 0.4
D 0.1
A 00 B 01 C 10 D 11
0 1.0
1
A 0.2
0 1 0.6
C 0.2
B 1
0 A 01
D 0.1 0.4
C 000
1
D 0010
1 0.2
E 0.1 E 0011
L=0.4x1+0.2x2+0.2x3+0.1x4+0.1x4=2.2 bits/símbolo
0 0.6
A 0.2
1 1.0
1 0.4
C 0.2 B 00
0
A 10
D 0.1 C 11
1
D 010
1 0.2 E 011
E 0.1
Rafael Molina Tema 3: Codificación Huffman 13
III.3 Código de Huffman adaptativo
7 (7)
número asignado a cada (9) 8
nodo.
5 (3) (4) 6
correspondiente al código de
Huffman para estos símbolos
con las probabilidades que se (1) (2) (2) (2)
obtienen a partir del número de 1 2 3 4
veces que ha aparecido cada
símbolo dividido por el número
de símbolo leídos.
Rafael Molina Tema 3: Codificación Huffman 17
En el código Huffman adaptativo ni el transmisor ni el
receptor conocen al principio las probabilidades de los
símbolos. Por eso:
2 Algoritmo de codificación.
3. Algoritmo de decodificación.
Si el símbolo ya ha aparecido
aabcdad
Nodos=2*4+1=9
NYT
• aabcdad en A={a,b,c,d}
salida=000
0 9
algoritmo de
0 1
codificación
0 7 0 8
NYT a
0 9
Paso 4 dentro del
0 1
algoritmo de
actualización 0 7 1 8
NYT a
1 9
algoritmo de 0 1
actualización 0 7 1 8
NYT a
Tenemos 0 1
0 7 1 8
NYT a
salida=000
salida=0001
Paso 2 del 1 9
algoritmo de 0 1
codificación
0 7 1 8
NYT a
Rafael Molina Tema 3: Codificación Huffman 28
Paso 3 del algoritmo de codificación (actualización)
1 9
Paso 4 dentro del
0 1
algoritmo de
actualización 0 7 2 8
NYT a
2 9
algoritmo de 0 1
actualización 0 7 2 8
NYT a
Tenemos 0 1
0 7 2 8
NYT a Código
salida=0001 de NYT
2 9
salida=00010001
0 1
Paso 1 del
algoritmo de 0 7 2 8 Código
de b
codificación a
0 1
0 5 0 6
NYT b
Rafael Molina Tema 3: Codificación Huffman 30
2 9 2 9
0 1 0 1
0 7 2 8
1 7 2 8
a a
0 1 0 1
0 5 1 6 0 5 1 6
NYT b NYT b
3 9
0 1
1 7 2 8
a
0 1 Paso 3 del algoritmo
0 5 1 6 de codificación
NYT b
(actualización)
Rafael Molina Tema 3: Codificación Huffman 31
Código
Algoritmo de codificación de NYT
• aabcdad sin adaptación del árbol
Tenemos salida=0001000100010
salida=00010001
3 9
c
0 1
3 9
1 7 2 8
0 1
a
1 7 2 8 0 1
a 0 5 1 6
0 1
0 1 b
0 5 1 6
NYT b
0 3 0 4
NYT c
Rafael Molina Tema 3: Codificación Huffman 32
3 9 3 9
0 1 0 1
1 7 2 8 2
1 7 8
a
0 1 0 1 a
0 5 1 6
0 1 1 5 1 6
b
0 3 1 4
0 1 b
NYT c 0 3 1 4
3 9
NYT c 4 9
0 1 0 1
2 7 2 8 2 7 2 8
a
0 1 a 0 1
1 5 1 6 1 5 1 6
0 1 b 0 1 b
0 3 1 4 0 3 1 4 adaptación
NYT c NYT c del árbol
Rafael Molina Tema 3: Codificación Huffman 33
Algoritmo de codificación
• aabcdad sin adaptación del árbol
NYT
Tenemos salida=0001000100010000011
4 d
9
salida=0001000100010 0 1
2 7 2 8
4 9 a
0 1 0 1
1 5 1 6
2 7 2 8 1
0 b
a
0 1 0 3 1 4
1 5 1 6 c
0 1 b
0 1
0 3 1 4
NYT
0 1 0 2
c
NYT d
Rafael Molina Tema 3: Codificación Huffman 34
4 9 4 9
0 1 0 1
2 7 2 8 2 7 2 8
a a
0 1 0 1
1 5 1 6 1 5 1 6
0 1 b 0 1 b
0 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
adaptación
del árbol
Rafael Molina Tema 3: Codificación Huffman 35
4 9
4 9
0 1 0 1
2 7 2 8
2
2 7 8
a
0 1 0 1 a
1 5 1 6
1 5 1 6
0 1 1
b
b 0
1 3 1 4 1 3 1 4
c
c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
adaptación
CAMBIO DE ORDEN
del árbol
Rafael Molina Tema 3: Codificación Huffman 36
4 9 4 9
0 1 0 1
2 7 2 8 2 7 2 8
a a
0 1 0 1
1 5 2 6 1 5 2 6
0 1 0 1
b b
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
adaptación
del árbol
Rafael Molina Tema 3: Codificación Huffman 37
4 9 4 9
0 1 0 1
2 7 2 8 2 7 3 8
a 0 1 a 0 1
1 5 2 6 1 5 2 6
0 1 0 1
b b
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
a 0 1
1 5 2 6
0 1
b
1 3 1 4
c
0 1
0 1 1 2
NYT d
adaptación
del árbol
Rafael Molina Tema 3: Codificación Huffman 39
• aabcdad Algoritmo de codificación sin
adaptación del árbol
Tenemos
salida=0001000100010000011 salida=00010001000100000110
5 9 5 9
0 1 0 1
2 7 3 8 2 7 3 8
a 0 1 a 0 1
1 5 2 6 1 5 2 6
0 1 0 1
b b
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
Rafael Molina Tema 3: Codificación Huffman 40
5 9 6 9
0 1 0 1
3 7 3 8 3 7 3 8
a 0 1 a 0 1
1 5 2 6 1 5 2 6
0 1 0 1
b b
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
adaptación
del árbol
Rafael Molina Tema 3: Codificación Huffman 41
• aabcdad Algoritmo de codificación sin
Tenemos adaptación del árbol
salida= salida=
00010001000100000110 000100010001000001101101
6 9 6 9 d
0 1 0 1
3 7 3 8 3 7 3 8
a 0 1 a 0 1
1 5 2 6 5 2 6
1
0 1 0 1
b b
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT d NYT d
Rafael Molina Tema 3: Codificación Huffman 42
6 9 6 9
0 1 0 1
3 7 3 8 3 7 3 8
a 0 1 a 0 1
6 1 5 2 6
1 5 2
1 0 1
b 0 d
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT NYT b
d
Observar cambio
Rafael Molina Tema 3: Codificación Huffman 43
6 9 6 9
0 1 0 1
3 7 3 8 3 7 3 8
a 0 1 a 0 1
2 5 2 6 2 5 2 6
0 1 0 1
d d
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT b NYT b
a 0 1 a 0 1
2 5 2 6 2 5 2 6
0 1 0 1
d d
1 3 1 4 1 3 1 4
c c
0 1 0 1
0 1 1 2 0 1 1 2
NYT b NYT b
P(N=n)=pnq n=0,1,2,….
n =0 n =0 n =0
q ∞
q ⎛ ∞
n⎞
= + qp ∑ np =
n −1
+ pq deriv ⎜ ∑ p ⎟
1− p n =0 1− p ⎝ n =0 ⎠
q 1 1
= + pq =
1− p (1 − p ) 1 − p
2
n =0 n =0 n =0
∞
q log(q )
=− − pq log( p )∑ np n −1
1− p n =0
q log(q ) ⎛ ∞ n⎞
=− − pq log( p )derivada⎜ ∑ p ⎟
1− p ⎝ n =0 ⎠
= − log(q ) −
q log(q ) 1 p
=− − pq log( p ) log( p )
1− p (1 − p )2
1− p
=−
1
(q log q + p log p )
1− p
Recuerda que q=1-p
⎡ 1 ⎤
w = ⎢− ⎥
⎢ log p ⎥
Rafael Molina Tema 3: Codificación Huffman 55
⎢n⎥
Para cada n sean Q=⎢ ⎥ y R = n − Qw
⎣ w⎦
En otras palabras Q es el cociente y R es el resto de la
división de n por w
N Q R Representación
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: Codificación Huffman 57
Supongamos que p=2^(-1/5) , entonces
w = 5, ⎡log w⎤ = 3
N Q R Representación
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: Codificación Huffman 58
La parte sufijo del código es mejorable cuando w no sea una
potencia de 2, si usamos la siguiente representación de
longitud variable:
Sea R ε {0,1,…,w-1}
w=2 w=3 0 1
Los arcos determinan el código
1 Los nodos contienen el resto
0 0
0 1 0 1
Resto R Representación
Resto R Representación 1 2
0 0
0 0 1 10
1 1 2 11
w=4 w=5
0 1 0 1
0 1 0 1 0 1 0 1
0 1 2 3 0 1 2
0 1
Resto R Representación Resto R Representación
0 00 0 00 3 4
1 01 1 01
2 10 2 10
3 11 3 110
4 111
Rafael Molina Tema 3: Codificación Huffman 61
Otro ejemplo de código Gollub:
Supongamos que p=2-1/5 . Entonces
w = 5, ⎡log w⎤ = 3
C N Q R Representación
Ó
D
0 0 0 000
I
G
1 0 1 001
O 2 0 2 010
G 3 0 3 0110
O
L 4 0 4 0111
L
U 5 1 0 1000
B
6 1 1 1001
Rafael Molina Tema 3: Codificación Huffman 62
III.5 Código Tunstall
Es un código de longitud fija en el que cada palabra del código puede representar
un número diferente de letras.
Código de Tunstall
Supongamos que tenemos inicialmente m símbolos y
queremos usar como salida representaciones de longitud fija
con n bits, siendo 2n>m. Suponemos que las realizaciones de
dichos símbolos son independientes. Construcción del árbol:
Paso 1
A B C
Paso 3
A B C
0.3 0.1
A B C
Paso 3
A B C
A B C
A B C
Entrada Salida
A B
AA 00
AB 01 10
A B
10
00 01
Entrada Salida
AAA 00 A B
AAB 01
11
AB 10 A B
B 11 10
A B
00 01
AB 011 ?
AC 100
B 101
C 110
Rafael Molina Tema 3: Codificación Huffman 72
III.6 Aplicaciones del código de Huffman
En las clases de prácticas se estudiarán las siguientes
aplicaciones: