Algoritmos básicos para la compresión sin pérdidas

Transcripción

Algoritmos básicos para la compresión sin pérdidas
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmos básicos para la compresión sin
pérdidas
(CTI: Parte II de la Lección 2, Compresores sin pérdidas)
Ramiro Moreno Chiral
Dpt. Matemàtica (UdL)
Febrero de 2010
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
1 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Índice
1
Algoritmos Huffman
2
Algoritmos Lempel–Ziv
3
Compresión aritmética
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
2 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Índice
1
Algoritmos Huffman
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
2
Algoritmos Lempel–Ziv
3
Compresión aritmética
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
3 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Resumen
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
4 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Resumen
Veremos en este apartado
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
4 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Resumen
Veremos en este apartado
Por qué los códigos Huffman son optimales.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
4 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Resumen
Veremos en este apartado
Por qué los códigos Huffman son optimales.
El algoritmo del Huffman básico, algoritmo en dos pasos.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
4 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Resumen
Veremos en este apartado
Por qué los códigos Huffman son optimales.
El algoritmo del Huffman básico, algoritmo en dos pasos.
Finalmente, el algoritmo de Gallager–Knuth para los
Huffman adaptativos o en un paso o universal.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
4 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Cota inferior de la longitud media de un código
instantáneo
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
5 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Cota inferior de la longitud media de un código
instantáneo
Proposición
La longitud esperada, L, no necesariamente mínima, de un
código instantáneo d-ario para una fuente simple S = (X , X ),
con |X | = r , es
L ≥ Hd (X ),
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
5 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Cota inferior de la longitud media de un código
instantáneo
Proposición
La longitud esperada, L, no necesariamente mínima, de un
código instantáneo d-ario para una fuente simple S = (X , X ),
con |X | = r , es
L ≥ Hd (X ),
alcanzándose la igualdad cuando pi = d −li , 1 ≤ i ≤ r , es decir,
cuando X tiene una distribución de probabilidad d-ádica
respecto a las longitudes de las palabras–código.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
5 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Cota inferior de la longitud media de un código
instantáneo
Proposición
La longitud esperada, L, no necesariamente mínima, de un
código instantáneo d-ario para una fuente simple S = (X , X ),
con |X | = r , es
L ≥ Hd (X ),
alcanzándose la igualdad cuando pi = d −li , 1 ≤ i ≤ r , es decir,
cuando X tiene una distribución de probabilidad d-ádica
respecto a las longitudes de las palabras–código.
Para esas fuentes d-ádicas los códigos de Shannon alcanzan
su longitud media mínima, igualando la entropía.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
5 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Árboles ponderados por hojas
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
6 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Árboles ponderados por hojas
Definición
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
6 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Árboles ponderados por hojas
Definición
Dados un árbol con raíz T , con r hojas, y un conjunto de pesos
F = {f1 , . . . , fr }, fi ∈ Z>0 , asociamos a cada hoja un peso fi y a
cada vértice interno la suma de los pesos de las hojas
descendientes de ese vértice.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
6 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Árboles ponderados por hojas
Definición
Dados un árbol con raíz T , con r hojas, y un conjunto de pesos
F = {f1 , . . . , fr }, fi ∈ Z>0 , asociamos a cada hoja un peso fi y a
cada vértice interno la suma de los pesos de las hojas
descendientes de ese vértice. Llamaremos árbol ponderado
por hojas según F al par (T , F )
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
6 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Árboles ponderados por hojas
Definición
Dados un árbol con raíz T , con r hojas, y un conjunto de pesos
F = {f1 , . . . , fr }, fi ∈ Z>0 , asociamos a cada hoja un peso fi y a
cada vértice interno la suma de los pesos de las hojas
descendientes de ese vértice. Llamaremos árbol ponderado
por hojas según F al par (T , F ) y definimos el peso de (T , F )
como
r
X
Peso(T ) =
fi hi ,
i=1
siendo hi , 1 ≤ i ≤ r , los niveles de las hojas de T .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
6 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
7 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código
Definición
Sea C un código instantáneo par a una fuente S con
estadística F = {f1 , . . . , fr }, y sea T su árbol de representación
literal.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
7 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código
Definición
Sea C un código instantáneo par a una fuente S con
estadística F = {f1 , . . . , fr }, y sea T su árbol de representación
literal.
Llamaremos árbol ponderado asociado a C al árbol
ponderado por hojas de T según F .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
7 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código
Definición
Sea C un código instantáneo par a una fuente S con
estadística F = {f1 , . . . , fr }, y sea T su árbol de representación
literal.
Llamaremos árbol ponderado asociado a C al árbol
ponderado por hojas de T según F .
Llamaremos costo del código C al peso de su árbol
ponderado asociado.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
7 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código
Definición
Sea C un código instantáneo par a una fuente S con
estadística F = {f1 , . . . , fr }, y sea T su árbol de representación
literal.
Llamaremos árbol ponderado asociado a C al árbol
ponderado por hojas de T según F .
Llamaremos costo del código C al peso de su árbol
ponderado asociado.
Diremos que C es un código de costo mínimo, o un código
optimal, si cualquier otro código instantáneo sobre S tiene
un costo mayor o igual.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
7 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código: Ejemplo
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
8 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código: Ejemplo
•
0
1
0
•
0
1
10
•
0
1
110
111
Asociamos a las hojas del árbol del código C sus frecuencias
absolutas como pesos,
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
8 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código: Ejemplo
•; 100
0
1
0; 50
•; 50
0
1
10; 30
•; 20
0
110; 15
1
111; 5
Asociamos a las hojas del árbol del código C sus frecuencias
absolutas como pesos,
C = {0, 10, 110, 111} → F = {50, 30, 15, 5}, obteniendo un
árbol ponderado por hojas según F .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
8 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código: Ejemplo
•; 100
0
1
0; 50
•; 50
0
1
10; 30
•; 20
0
110; 15
El peso,
P
1
111; 5
fi hi , del árbol asociado a C es
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
8 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código: Ejemplo
•; 100
0
1
0; 50
•; 50
0
1
10; 30
•; 20
0
110; 15
El peso,
P
1
111; 5
fi hi , del árbol asociado a C es
Peso(TC ) = 50 × 1 + 30 × 2 + 15 × 3 + 5 × 3 = 170.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
8 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Costo de un código: Ejemplo
•; 1
0
1
0; 0’5
•; 0’5
0
1
10; 0’3
•; 0’2
0
110; 0’15
1
111; 0’05
Nótese que si las frecuencias fuesen relativas el peso sería la
longitud media:
Peso(TC ) = L = 10 7.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
8 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Hojas hermanas en los árboles ponderados
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
9 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Hojas hermanas en los árboles ponderados
Lema
Dado un conjunto ordenado de pesos, F = {f1 ≤ f2 ≤ · · · ≤ fr },
existe un árbol d-ario T ponderado por hojas según F , de peso
mínimo, tal que
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
9 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Hojas hermanas en los árboles ponderados
Lema
Dado un conjunto ordenado de pesos, F = {f1 ≤ f2 ≤ · · · ≤ fr },
existe un árbol d-ario T ponderado por hojas según F , de peso
mínimo, tal que
Si fj > fk , los niveles de esas hojas verifican hj ≤ hk .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
9 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Hojas hermanas en los árboles ponderados
Lema
Dado un conjunto ordenado de pesos, F = {f1 ≤ f2 ≤ · · · ≤ fr },
existe un árbol d-ario T ponderado por hojas según F , de peso
mínimo, tal que
Si fj > fk , los niveles de esas hojas verifican hj ≤ hk .
Los d niveles superiores de T , h1 , . . . , hd son iguales:
h1 = · · · = hd .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
9 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Hojas hermanas en los árboles ponderados
Lema
Dado un conjunto ordenado de pesos, F = {f1 ≤ f2 ≤ · · · ≤ fr },
existe un árbol d-ario T ponderado por hojas según F , de peso
mínimo, tal que
Si fj > fk , los niveles de esas hojas verifican hj ≤ hk .
Los d niveles superiores de T , h1 , . . . , hd son iguales:
h1 = · · · = hd .
Y las d hojas correspondientes, las de menores
frecuencias f1 , . . . , fd , son hermanas, es decir, hijas de un
mismo vértice interno.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
9 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Construcción de códigos optimales
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
10 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Construcción de códigos optimales
Teorema (Huffman)
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
10 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Construcción de códigos optimales
Teorema (Huffman)
Dada una fuente S con r caracteres y un código instantáneo C,
d-ario, con las propiedades del lema para S,
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
10 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Construcción de códigos optimales
Teorema (Huffman)
Dada una fuente S con r caracteres y un código instantáneo C,
d-ario, con las propiedades del lema para S, se construye otro
código C (r ) , reducido del C, para una fuente con r − d + 1
caracteres, que coincide con S en los r − d caracteres más
frecuentes y tiene un carácter nuevo con frecuencia la suma de
las d frecuencias menores de S.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
10 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Construcción de códigos optimales
Teorema (Huffman)
Dada una fuente S con r caracteres y un código instantáneo C,
d-ario, con las propiedades del lema para S, se construye otro
código C (r ) , reducido del C, para una fuente con r − d + 1
caracteres, que coincide con S en los r − d caracteres más
frecuentes y tiene un carácter nuevo con frecuencia la suma de
las d frecuencias menores de S. Entonces, si C (r ) es optimal
para la nueva fuente, C también lo es para S.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
10 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Construcción de códigos optimales
Teorema (Huffman)
Dada una fuente S con r caracteres y un código instantáneo C,
d-ario, con las propiedades del lema para S, se construye otro
código C (r ) , reducido del C, para una fuente con r − d + 1
caracteres, que coincide con S en los r − d caracteres más
frecuentes y tiene un carácter nuevo con frecuencia la suma de
las d frecuencias menores de S. Entonces, si C (r ) es optimal
para la nueva fuente, C también lo es para S.
Corolario (Código de Huffman)
Aplicando sucesivamente el teorema se obtiene un código de
Huffman que es optimal.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
10 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Primer paso
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
11 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Primer paso
Dado un fichero fuente sobre un alfabeto X = {a, b, c, d, e},
realizamos una lectura, primer paso, que asigne a cada
carácter fuente la frecuencia absoluta con que se presenta.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
11 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Primer paso
Dado un fichero fuente sobre un alfabeto X = {a, b, c, d, e},
realizamos una lectura, primer paso, que asigne a cada
carácter fuente la frecuencia absoluta con que se presenta.
a;12
b;20
c;15
d;41
e;12
Obtenemos así una lista inicial de los caracteres y sus
frecuencias absolutas o pesos.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
11 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Primer paso
Dado un fichero fuente sobre un alfabeto X = {a, b, c, d, e},
realizamos una lectura, primer paso, que asigne a cada
carácter fuente la frecuencia absoluta con que se presenta.
a;12
e;12
c;15
b;20
d;41
Para llegar finalmente a esa lista inicial ordenada por pesos.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
11 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
Consideremos el mismo ejemplo anterior: alfabeto–fuente X =
{a, b, c, d, e} y pesos F = {12, 20, 15, 41, 12}, y la lista ordenada
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
Consideremos el mismo ejemplo anterior: alfabeto–fuente X =
{a, b, c, d, e} y pesos F = {12, 20, 15, 41, 12}, y la lista ordenada
a;12
Ramiro Moreno (Matemàtica, UdL)
e;12
c;15
b;20
Algoritmos básicos compresión sin pérdidas
d;41
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
a;12
Ramiro Moreno (Matemàtica, UdL)
e;12
c;15
b;20
Algoritmos básicos compresión sin pérdidas
24
d;41
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
c;15
b;20
a;12
Ramiro Moreno (Matemàtica, UdL)
24
d;41
e;12
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
c;15
24
b;20
a;12
Ramiro Moreno (Matemàtica, UdL)
35
d;41
e;12
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
24
a;12
Ramiro Moreno (Matemàtica, UdL)
35
e;12
c;15
d;41
b;20
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
24
a;12
Ramiro Moreno (Matemàtica, UdL)
35
e;12
c;15
d;41
59
b;20
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
59
d;41
24
a;12
Ramiro Moreno (Matemàtica, UdL)
35
e;12
c;15
b;20
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
d;41
59
100
24
a;12
Ramiro Moreno (Matemàtica, UdL)
35
e;12
c;15
b;20
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: construcción del árbol de Huffman
100
d;41
59
24
a;12
Ramiro Moreno (Matemàtica, UdL)
35
e;12
c;15
b;20
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
12 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
0
1
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
0
1
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
1
0
d
0
a
Ramiro Moreno (Matemàtica, UdL)
0
100
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
0
1
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
1
0
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
110
1
0
1
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
0
1
d
0
a
Ramiro Moreno (Matemàtica, UdL)
0
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Compresor Huffman básico
Segundo paso: codificación
Codificamos la secuencia ejemplo ’acd’.
raiz
0
1
d
0
a
Ramiro Moreno (Matemàtica, UdL)
0
0
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
13 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Descompresor Huffman básico
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
14 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Descompresor Huffman básico
Construído el árbol Huffman a partir de la estadística,
decodificamos la secuencia ’1001100’.
raiz
0
1
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
14 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Descompresor Huffman básico
Construído el árbol Huffman a partir de la estadística,
decodificamos la secuencia ’1001100’.
raiz
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
14 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Descompresor Huffman básico
Construído el árbol Huffman a partir de la estadística,
decodificamos la secuencia ’1001100’.
raiz
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
0
1
0
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
14 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Descompresor Huffman básico
Construído el árbol Huffman a partir de la estadística,
decodificamos la secuencia ’1001100’.
raiz
0
1
0
a
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
14 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Descompresor Huffman básico
Construído el árbol Huffman a partir de la estadística,
decodificamos la secuencia ’1001100’.
raiz
d
0
0
a
Ramiro Moreno (Matemàtica, UdL)
1
1
0
1
1
0
e
c
1
b
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
14 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Un código universal es el que no depende de la estadística de
la fuente y por ello es de aplicación “universal”.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Un código universal es el que no depende de la estadística de
la fuente y por ello es de aplicación “universal”.
Los códigos adaptativos Huffman, CAH, son universales, en
cambio el Huffman básico no.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Características básicas de los CAH
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Características básicas de los CAH
Se construyen árboles de Huffman dinámicos: El carácter
(k + 1)-ésimo se codifica a partir del árbol construído con
los k caracteres anteriores.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Características básicas de los CAH
Se construyen árboles de Huffman dinámicos: El carácter
(k + 1)-ésimo se codifica a partir del árbol construído con
los k caracteres anteriores.
Se mantiene una lista de todos los vértices del árbol,
ordenada por sus pesos .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Introducción a los códigos adaptativos Huffman (CAH)
Características básicas de los CAH
Se construyen árboles de Huffman dinámicos: El carácter
(k + 1)-ésimo se codifica a partir del árbol construído con
los k caracteres anteriores.
Se mantiene una lista de todos los vértices del árbol,
ordenada por sus pesos .
La modificación de cada árbol mantiene la “sibling
property” o de los vértices hermanos: dos vértices
hermanos son consecutivos en la lista y el padre de ambos
es posterior, no obligatoriamente inmediato, a ambos.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
15 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Lista actual de vértices y pesos
Vért.
Pesos
1
2
2
3
3
5
4
5
11
9
10
11
3
6
6
7
10
8
11
9
11
10
21
11
32
32
7
21
8
10
5
4
1
Ramiro Moreno (Matemàtica, UdL)
5
5
2
5
5
2
5
11
6
6
3
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Path desde el vértice actual al raíz
Vért.
Pesos
1
2
2
3
3
5
4
5
11
9
10
11
3
6
6
7
10
8
11
9
11
10
21
11
32
32
7
21
8
10
5
4
1
Ramiro Moreno (Matemàtica, UdL)
5
5
2
5
5
2
5
11
6
6
3
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Vértice actual y sigs. con igual peso
Vért.
Pesos
1
2
2
3
3
5
4
5
11
9
10
11
3
6
6
7
10
8
11
9
11
10
21
11
32
32
7
21
8
10
5
4
1
Ramiro Moreno (Matemàtica, UdL)
5
5
2
5
5
2
5
11
6
6
3
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Vértice actual (sig. en el path), y sigs. con igual peso
Vért.
Pesos
1
2
2
3
3
5
4
5
11
9
10
11
3
6
6
7
10
8
11
9
11
10
21
11
32
32
7
21
8
10
5
4
1
Ramiro Moreno (Matemàtica, UdL)
5
5
2
5
5
2
5
11
6
6
3
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Intercambio de subárboles y actualización del path
Vért.
Pesos
1
2
2
3
3
5
4
5
11
9
5
5
10
7
5
8
11
9
11
10
21
11
32
21
8
10
4
5
1
Ramiro Moreno (Matemàtica, UdL)
7
10
32
11
3
6
6
5
2
11
6
5
2
6
3
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Vértice actual (sig. en el path), y sigs. con igual peso
Vért.
Pesos
1
2
2
3
3
5
4
5
11
9
5
5
10
7
5
8
11
9
11
10
21
11
32
21
8
10
4
5
1
Ramiro Moreno (Matemàtica, UdL)
7
10
32
11
3
6
6
5
2
11
6
5
2
6
3
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Intercambio de subárboles y actualización del path
Vért.
Pesos
1
2
2
3
3
5
4
5
5
5
6
6
7
10
8
11
9
11
10
21
11
32
11 32
9
5
1
Ramiro Moreno (Matemàtica, UdL)
2
10
11
5
2
6
6
3
3
7
5
21
10
4
8
11
5
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Vértice actual (sig. en el path), y sigs. con igual peso
Vért.
Pesos
1
2
2
3
3
5
4
5
5
5
6
6
11
9
5
1
Ramiro Moreno (Matemàtica, UdL)
2
7
10
10
2
6
6
3
3
7
5
9
11
10
21
11
32
Raiz:
FIN
32
11
5
8
11
21
8 11
10
4
5
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Actualización del árbol adaptativo
Actualización de los pesos del path
Vért.
Pesos
1
2
2
4
3
5
4
5
5
6
6
6
11
9
5
1
Ramiro Moreno (Matemàtica, UdL)
2
7
10
10
6
2
4
6
3
9
12
10
21
11
33
33
12
6
8
11
7
5
21
8 11
10
4
5
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
16 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Tratamiento de los caracteres de peso cero
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
17 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Tratamiento de los caracteres de peso cero
33
21
12
6
6
4
2
0
11
10
5
5
2
w x y z
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
17 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Tratamiento de los caracteres de peso cero
33
21
12
6
6
4
2
0
w x y z
Ramiro Moreno (Matemàtica, UdL)
11
10
5
5
2
C(y)=000010
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
17 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Tratamiento de los caracteres de peso cero
33
21
12
6
6
4
2
5
5
2
0
0
11
10
0
w x z
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
17 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Los códigos Huffman son optimales
Huffman básico
Huffman adaptativo
Tratamiento de los caracteres de peso cero
34
21
13
6
7
3
1
0
4
11
10
5
5
2
1 C(y)=00001
w x z
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
17 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Índice
1
Algoritmos Huffman
2
Algoritmos Lempel–Ziv
Algoritmo LZ77
Algoritmo LZ78
3
Compresión aritmética
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
18 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Dada una cadena x ∈ X ∗ se “reproduce” a partir de sus
prefijos.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Dada una cadena x ∈ X ∗ se “reproduce” a partir de sus
prefijos.
Se usa un puntero p y la longitud, l, que indican desde
dónde y cuánto se reproduce.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Dada una cadena x ∈ X ∗ se “reproduce” a partir de sus
prefijos.
Se usa un puntero p y la longitud, l, que indican desde
dónde y cuánto se reproduce.
Una reproducción se construye con el menor p que
permita la mayor l.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Dada una cadena x ∈ X ∗ se “reproduce” a partir de sus
prefijos.
Se usa un puntero p y la longitud, l, que indican desde
dónde y cuánto se reproduce.
Una reproducción se construye con el menor p que
permita la mayor l.
Se añade un caracter nuevo para formar una producción.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Dada una cadena x ∈ X ∗ se “reproduce” a partir de sus
prefijos.
Se usa un puntero p y la longitud, l, que indican desde
dónde y cuánto se reproduce.
Una reproducción se construye con el menor p que
permita la mayor l.
Se añade un caracter nuevo para formar una producción.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Generalidades
Dada una cadena x ∈ X ∗ se “reproduce” a partir de sus
prefijos.
Se usa un puntero p y la longitud, l, que indican desde
dónde y cuánto se reproduce.
Una reproducción se construye con el menor p que
permita la mayor l.
Se añade un caracter nuevo para formar una producción.
Definición
Llamaremos complejidad Ziv–Lempel de una cadena x al
número c(x) de producciones que “reproducen” x.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
19 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
l
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
–
l
–
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
0⇒001
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
–
1
l
–
2
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
0⇒001
0 · 001⇒10
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
–
1
4
l
–
2
1
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
0⇒001
0 · 001⇒10
0 · 001 · 10⇒100
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
–
1
4
5
l
–
2
1
2
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
0⇒001
0 · 001⇒10
0 · 001 · 10⇒100
0 · 001 · 10 · 100⇒1000
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
–
1
4
5
7
l
–
2
1
2
3
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
0⇒001
0 · 001⇒10
0 · 001 · 10⇒100
0 · 001 · 10 · 100⇒1000
0 · 001 · 10 · 100 · 1000→ 101
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
p
–
1
4
5
7
5
l
–
2
1
2
3
3
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación Lempel–Ziv
Reproducción de una secuencia
Sea la secuencia x = 0001101001000101 ∈ {0, 1}∗ .
secuencia actual⇒producción
λ⇒0
0⇒001
0 · 001⇒10
0 · 001 · 10⇒100
0 · 001 · 10 · 100⇒1000
0 · 001 · 10 · 100 · 1000→ 101
p
–
1
4
5
7
5
l
–
2
1
2
3
3
Por lo tanto la complejidad es c(x) = 6.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
20 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Inicialmente el pasado se llena con un carácter arbitrario y
se “alimenta” el presente con los primeros L caracteres de
la secuencia a codificar.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Inicialmente el pasado se llena con un carácter arbitrario y
se “alimenta” el presente con los primeros L caracteres de
la secuencia a codificar.
En cada paso del algoritmo
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Inicialmente el pasado se llena con un carácter arbitrario y
se “alimenta” el presente con los primeros L caracteres de
la secuencia a codificar.
En cada paso del algoritmo
1
se busca el menor p en el pasado que reproduzca la
cadena del presente de l mayor;
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Inicialmente el pasado se llena con un carácter arbitrario y
se “alimenta” el presente con los primeros L caracteres de
la secuencia a codificar.
En cada paso del algoritmo
1
2
se busca el menor p en el pasado que reproduzca la
cadena del presente de l mayor;
se forma la producción π con los primeros l + 1 caracteres
del presente;
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Inicialmente el pasado se llena con un carácter arbitrario y
se “alimenta” el presente con los primeros L caracteres de
la secuencia a codificar.
En cada paso del algoritmo
1
2
3
se busca el menor p en el pasado que reproduzca la
cadena del presente de l mayor;
se forma la producción π con los primeros l + 1 caracteres
del presente;
se codifica π como C = C1 kC2 kC3 , con C1 = (p − 1)r ,
C2 = (l)r , C3 es el carácter (l + 1)-ésimo del presente yr
r = |X |;
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Algoritmo
Se dispone de una memoria buffer con n caracteres: L
para el presente y n − L para el pasado.
Inicialmente el pasado se llena con un carácter arbitrario y
se “alimenta” el presente con los primeros L caracteres de
la secuencia a codificar.
En cada paso del algoritmo
1
2
3
4
se busca el menor p en el pasado que reproduzca la
cadena del presente de l mayor;
se forma la producción π con los primeros l + 1 caracteres
del presente;
se codifica π como C = C1 kC2 kC3 , con C1 = (p − 1)r ,
C2 = (l)r , C3 es el carácter (l + 1)-ésimo del presente yr
r = |X |;
se desplazan l + 1 caracteres hacia el pasado en todo el
buffer y se realimenta el presente con l + 1 nuevos.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
21 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
pasado
Ramiro Moreno (Matemàtica, UdL)
presente
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
pasado
0
1
2
Ramiro Moreno (Matemàtica, UdL)
3
4
presente
5
6
7
8
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
pasado
presente
0
1
2
3
4
5
6
7
8
a
a
a
a
a
a
a
a
a
Ramiro Moreno (Matemàtica, UdL)
a
a
b
a
Algoritmos básicos compresión sin pérdidas
b
a
c
b
a
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
pasado
presente
0
1
2
3
4
5
6
7
8
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
b
Ramiro Moreno (Matemàtica, UdL)
a
a
a
b
b
a
a
c
Algoritmos básicos compresión sin pérdidas
b
b
a
a
c
c
b
b
a
a
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
pasado
presente
0
1
2
3
4
5
6
7
8
a
a
a
a
a
a
a
a
a
a
a
a
a
a
b
a
a
a
a
a
b
a
a
a
a
b
c
Ramiro Moreno (Matemàtica, UdL)
a
a
b
a
b
a
b
a
c
a
c
b
Algoritmos básicos compresión sin pérdidas
b
b
a
a
a
c
c
c
b
b
b
c
a
a
a
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ77
Ejemplo
Sea X = {a, b, c}, r = 3, un buffer de n = 18 caracteres,
L = 9 y x = aababacbacbacbcacbacbcaa.
pasado
presente
0
1
2
3
4
5
6
7
8
a
a
a
c
a
a
a
b
a
a
a
a
a
a
a
c
a
a
b
b
a
a
a
a
a
a
b
c
a
a
a
b
a
b
c
c
Ramiro Moreno (Matemàtica, UdL)
a
a
b
a
a
b
a
c
b
a
c
b
a
c
b
a
Algoritmos básicos compresión sin pérdidas
b
b
a
c
a
a
c
b
c
c
b
c
b
b
c
a
a
a
a
a
Febrero de 2010
22 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ78
Ejemplo en la web de Data Compression
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
23 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ78
Ejemplo en la web de Data Compression
En vez de usar un buffer como en el caso LZ77, ahora, en el
modelo LZ78, las producciones se almacenan dinámicamente
en un diccionario y se codifican como punteros a ese
diccionario.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
23 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Algoritmo LZ77
Algoritmo LZ78
Codificación LZ78
Ejemplo en la web de Data Compression
En vez de usar un buffer como en el caso LZ77, ahora, en el
modelo LZ78, las producciones se almacenan dinámicamente
en un diccionario y se codifican como punteros a ese
diccionario.
Ved un ejemplo de este modelo en la web de Data
Compression,
http:
//www.data-compression.com/lempelziv.shtml
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
23 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Índice
1
Algoritmos Huffman
2
Algoritmos Lempel–Ziv
3
Compresión aritmética
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
24 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Compresión aritmética, CA
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
25 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Compresión aritmética, CA
Para una idea del algoritmo básico ver las transparencias 1–38
del fichero arit-PPM.pdf, Implementació d’un compresor
aritmètic utilitzant el model estadístic PPM, trabajo de CTI en
2001 de Damià Castellà y Daniel Llobera.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
25 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Compresión aritmética, CA
Para una idea del algoritmo básico ver las transparencias 1–38
del fichero arit-PPM.pdf, Implementació d’un compresor
aritmètic utilitzant el model estadístic PPM, trabajo de CTI en
2001 de Damià Castellà y Daniel Llobera.
Para más información sobre la CA ver el fichero
ArithCodWNC.pdf, Arithmetic coding for data compression,
1987, de los creadores de este modelo de compresión,
I. H. Witten, R. M. Neal y J. G. Cleary.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
25 / 25
Algoritmos Huffman
Algoritmos Lempel–Ziv
Compresión aritmética
Compresión aritmética, CA
Para una idea del algoritmo básico ver las transparencias 1–38
del fichero arit-PPM.pdf, Implementació d’un compresor
aritmètic utilitzant el model estadístic PPM, trabajo de CTI en
2001 de Damià Castellà y Daniel Llobera.
Para más información sobre la CA ver el fichero
ArithCodWNC.pdf, Arithmetic coding for data compression,
1987, de los creadores de este modelo de compresión,
I. H. Witten, R. M. Neal y J. G. Cleary.
Y para entender los modelos adaptativos en la CA, como el
PPM, Prediction by partial match, ver el PPMunbounded.pdf,
Unbounded length contexts for PPM, 1997, de J. G. Cleary,
W. J. Teahan y I. H. Witten.
Ramiro Moreno (Matemàtica, UdL)
Algoritmos básicos compresión sin pérdidas
Febrero de 2010
25 / 25

Documentos relacionados