Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
Técnicas de Diccionario
57
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 58
Entrada Palabra-código
a 000
b 001
c 010
d 011
e 100
ab 101
ac 110
ad 111
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 59
Diccionario y look-ahead buffer
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 60
··· a ···
Ejemplo 4.3.1. Supongamos que se desea aplicar el método LZ77 para com-
primir el mensaje
abbacadabbaacaacaccaadca.
Vamos a considerar una ventana deslizante de 13 posiciones y un dic-
cionario de 7. La forma del diccionario y del buffer al principio es la siguiente
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 61
Diccionario → y look-ahead buffer
a b b a c a d a b b a a c ←−
Diccionario → y look-ahead buffer
a d a b b a a c a a c a c ←−
Diccionario → y look-ahead buffer
d a b b a a c a a c a c c ←−
Diccionario → y look-ahead buffer
a c a a c a c c a a d c a ←−
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 62
Ahora el match es “c a a”, que permite generar la terna h6, 3, di. El resul-
tado hasta ahora serı́a la cadena
ı́ndice entrada
1 &
2 b
3 a
4 c
5 v
ı́ndice entrada
1 &
2 b
3 a
4 c
5 v
6 vb
7 ba
8 aa
9 ab
10 b&
11 &v
Llegados a este punto, procederı́amos a codificar & con su ı́ndice (1), para
continuar con la codificación de v. Como v está en el diccionario, se concatena
v con el siguiente sı́mbolo, lo que produce la cadena vb. Como está en el
diccionario, se concatena con la siguiente letra del mensaje y resulta vba. Al
no estar en la lista, la añadimos como la entrada número 12, codificamos vb
con su ı́ndice (6) y se continua el proceso. La porción del mensaje que hemos
codificado adopta la forma: 5233216810. Esto supone que el mensaje fuente
ha sido “troceado” de la forma siguiente:
Una forma de recoger ordenadamente todos los pasos que se van dando
consiste en elaborar una tabla de 5 columnas. En la primera se colocan lo
que llamaremos prefijos, en la segunda los sufijos, en la tercera nueva cadena,
en la cuarta los ı́ndices, que se corresponden con las entradas del diccionario
que vamos codificando (el sı́mbolo “-” indica que nueva cadena está en el
diccionario) y, finalmente, en la quinta las nuevas entradas del diccionario.
Los sufijos son los sı́mbolos del mensaje a medida que van siendo recibidos
por el codificador. El prefijo inicial es la cadena vacı́a y será denotado por
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 65
que sale del compresor, hay dos ı́ndices consecutivos cuyas correspondientes
entradas son del tipo C y Cs, donde s denota un sı́mbolo individual y C
es una cadena. Afortunadamente, como veremos en seguida. esta dificultad
puede remediarse.
Veamos un sencillo ejemplo en el que se da esta situación.
4.5. Aplicaciones
El comando compress de UNIX es una de las primeras aplicaciones del
método LZW. Comienza con un diccionario de tamaño 512, por lo que las
palabras-código constan de 9 bits. Cuando el diccionario se completa, se
duplica su tamaño. Las 1024 entradas se codifican ahora con 10 bits. El
tamaño se va duplicando progresivamente, a medida que se va completando.
El usuario puede fijar la longitud máxima de las palabras-código, que será
siempre un número comprendido entre 9 y 18 (16 es el tamaño máximo por
defecto). Una vez que se alcanza el tamaño máximo, compress se convierte
en una técnica de compresión con diccionario estático.
También se usa el método LZW en la compresión de imágenes. El formato
GIF (Graphics Interchange Format) fue desarrollado por CIS (Compuserve
Information Service) para codificar imágenes gráficas. Usa el algoritmo LZW
y se parece bastante al comando compress de UNIX. La imagen comprimida
se almacena comenzando con un byte que representa el mı́nimo número m
de bits por pixel en la imagen original y el tamaño inicial del diccionario
es 2m+1 y, como en el caso anterior, se va duplicando a medida que se va
completando. Cuando el tamaño es de 4096, el algoritmo pasa a convertirse
CAPÍTULO 4. TÉCNICAS DE DICCIONARIO 72
el conjunto formado por las cadenas de longitud 2 de la forma “a-”, junto con
las de longitud 1 distintas de “a”.
La tabla muestra cada una de estas cadenas junto con las probabilidades
correspondientes.
cadenas probabilidades
b 0.3
c 0.1
aa 0.36
ab 0.18
ac 0.06
cadenas probabilidades
a1 p1
a2 p2
... ...
an pn
n + k · (n − 1) ≤ 2L y n + (k + 1) · (n − 1) > 2L .
= log2 (mpmin ).
Con esta desigualdad y (4.1) obtenemos
L LH(S) LH(S)
`= m = ≤ .
X H(D) log2 (mpmin )
Pi `1
i
Por último, como 2L−1 ≤ m < 2L , se sigue que L − 1 ≤ log2 m. Por tanto,
obtenemos para ` la siguiente acotación
1 + log2 m
` ≤ H(S) .
log2 (pmin ) + log2 m
4.7. Ejercicios
1. Se considera el alfabeto fuente S = {a, b, c} con probabilidades P =
{0.7, 0.2, 0.1}. a) Determinar la entropı́a de la fuente y el código de Tun-
stall de 3 bits. b) Obtener el código de Huffman y comparar los resultados
obtenidos.