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