Algoritmos de Compresi´ Compresion o´ n de Datos Juan Jos´e Ram´ R am´ırez ırez Lama
[email protected] Universidad del B´ıo-B´ ıo-B´ıo, ıo, Facultad de Ciencias Empresariales, Departamento de Sistemas de Informaci´ Informacion, o´ n, Mag´ıster ıster en Ciencias de la Computacion, ´ Chile
Resumen El objet objetiv ivo o de este este trab trabajoes ajoes pres presen entarlas tarlas tecnicas e´ cnicas princip principalesde alesde comcompresi´ presion o´ n de datos, presentando su esquema, algoritmos y ejemplos (en algunos casos). En la compresi´ compresion o´ n de datos existen otras t´ tecnicas e´ cnicas y algoritmos algoritmos aplicables tambi´ tambien e´ n a la multimedia (im´ (imagenes, a´ genes, v´ v´ıdeo ıdeo y audio), a los que comunmente u´ nmente se les llama “compresi´ “compresion o´ n con p´ perdida”, e´ rdida”, los cuales solo se mencionan en t´ terminos e´ rminos generales, ya que el objetivo de este documento es dar a conocer y comprender de manera mas simple las t´ tecnicas e´ cnicas de compresi compresi´on o´ n “sin p´ perdida”, e´ rdida”, este tipo de datos se basan en las repeticiones de secuencias que pueden ser resumidas o agrupadas para disminuir el peso de bytes del archivo final. A pesar de eso, la compresi´ compresion o´ n sin perdida no reduce considerablemente el tama˜ no, ya que si hay pocas repeticiones no es posible disminuir disminuir el tama˜ tamano, n˜ o, Por lo cual, para esta categor´ categor´ıa ıa existen varias varias tecnicas e´ cnicas distintas como los algoritmos predictivos, por diccionario, prefijos y aritm´ aritmeticos, e´ ticos, entre otros. otros. Por lo anterior anterior se ha optado por enfocarse en las tecnie´ cnicas que se dedican a este tipo de datos (t´ecnicas ecnicas de compresi´on sin perdida), perdida), por lo que se le entregar´ entregara´ al lector las referencias pertinentes para que, si lo desea, pueda profundizar en las t´ecnicas de compresi´on on con perdida. Sin embargo las tecnicas e´ cnicas de compresi´ compresion o´ n con p´ perdida, e´ rdida, utilizan utilizan en la gran mayor´ mayor´ıa ıa de los casos, algoritmos goritmos que son muy aplicados aplicados en la compresi´ on de texto. Compresion, o´ n, Compresi Compresi´on o´ n de datos, Algoritmos de compresi´on, on, Compresi´on on en el mundo real, Estructuras Estructuras de compresi´ on.
Palabras Clave —
1.
Intr Introd oduc ucci ci´on o´ n Seg´ Segun u´ n lo define la RAE1 , compresion o´ n es:
Definici´ Definicion o´ n 1. (i) Acci´ Accion ´ y efecto de comprimir. (ii) Esfuerzo a que est ´ est a´ sometido un cuerpo por la acci on opuestas que ´ de dos fuerzas opuestas tienden a disminuir su volumen. ´ o inform´ En Ciencias de la Computaci on informatica a´ tica en general a la compresi on o´ n se le denomina compresi on o´ n de datos el cual se define como [2]:
Definici´ Definicion o´ n 2. La reducci on ´ del volumen de datos tratables para representar una determinada informaci´ on empleando una menor cantidad de espacio. 1
Real Academia de la Lengua Espa˜ Espanola. n˜ ola.
En la actualizad existen una gran cantidad de algoritmos para la compresi on o´ n de datos, los cuales son muy utilizados en archivos binarios, de texto e incluso multimedia. En particular las t ecnicas e´ cnicas de compresi on o´ n se dividen en 2 categor´ categor ´ıas ıas generales: Compresi on o´ n sin P´ Perdida e´ rdida (ver Secci on ´ 3) y Compresi on o´ n con p´ perdida e´ rdida (ver Secci on o´ n 4), ambas tienen un enfoque muy preciso, la compresi´on on sin p´erdida, erdida, es m´as as lenta y no disminuye mucho su tamano, n˜ o, pero no se pierde informaci on, o´ n, con lo que siempre se obtiene el dato original. ´ ´ En cambio, la compresi on on con p´ perdida, erdida, elimina informaci on, o´ n, haciendo que disminuya bastante el tama no n˜ o del original, original, pero no es posible reconstrui reconstruirlo rlo al 100 % del original, original, este tipo de compresi on o´ n es muy popular en archivos multimedia. Ambas t ecnicas e´ cnicas se describir´an an y a lo largo del documento, y en algunos casos, con ejemplos. Sin embargo, este trabajo se centra principalmente en la compresi on o´ n sin p´ perdida, e´ rdida, por lo que la compresi on o´ n con p´ perdida, e´ rdida, se presentar a´ con el objetivo de guiar al lector a la comprensi on o´ n de las t´ tecnicas e´ cnicas en estas areas, a´ reas, pero no se realizar a´ una descripcion o´ n muy detallada ni algor´ algor´ıtmica. ıtmica. Este trabajo comienza con la Secci´on on 1, el cual introduce el tema tratado, luego en la Secci´ Seccion o´ n 2 se presenta todo lo referente a la compresi on o´ n de datos propiamente tal, para luego continuar en la Secci on o´ n 3 con el desarrollo de los principales temas relacionados ´ de datos sin perdida y posteriormente en la Secci on con la compresi on o´ n 4 introducir al lector en los conceptos claves para la compresi on o´ n de datos con perdida, Finalmente en la Secci´on on 5 se concluye todo lo referente a este trabajo.
Comp Comprresi esion o´ n de Datos
2.
Se utiliza la compresi on, o´ n, para transmitir la misma cantidad de informaci on o´ n que ocu2 par´ıa ıa una gran cantidad ca ntidad de bytes en un n´umero umero inferior de bytes; es un caso particular de la codificacion, o´ n, cuya caracter´ caracter´ıstica ıstica principal es que el c odigo o´ digo resultante tiene menor tamano n˜ o que el original. La compresi on o´ n de datos se basa fundamentalmente en buscar repeticiones en series de datos para despu es e´ s almacenar solo el dato junto al n umero u´ mero de veces que se repite. Ejemplo Ejemplo 1. Sea un archivo archivo con una secuencia secuencia como “AAAAAA”, el que ocupa 6 bytes, este se podr ´ ´ıa almacenar simplemente como “6A” que ocupa solo 2 bytes.
2.1.
Algoritmo Algoritmoss de Compresi Compresi´on o´ n
Como en el mundo real (salvo algunas im agenes) a´ genes) es poco frecuente encontrar pa3 trones comunes que puedan “resumirse” (como en el ejemplo 1), existen m etodos e´ todos que permiten realizar la compresi on, o´ n, buscando agrupar secuencias de datos para reducir su tama˜no, no, o tambi´en en realizando sustituciones con el mismo fin, estos algoritmos pos si solos ya reducen la cantidad de bytes de informaci on, o´ n, primero agrupando secuencias de datos, luego asign´ asignandoles a´ ndoles valores binarios y luego en algunos caso aplic andole a´ ndole otro metodo e´ todo de compresi on, o´ n, todo en busca de reducir el tama no n˜ o de la informaci on, o´ n, para que sea m´ mas a´ s f acil a´ cil y r´ rapida a´ pida su transmisi on o´ n y/o almacenamiento. Las principales t ecnicas e´ cnicas de compresi´on on de datos dato s se clasifican clasific an en las siguientes s iguientes categor´ c ategor´ıas. ıas. 2 3
1 byte = 8 bits. Elementos que se reiteran.
Algoritmos de Sustituci o´ n: reemplazan una secuencia de caracteres por una m a´ s corta. Algoritmos Prefijos: examina los caracteres m a´ s repetidos para luego codificar de forma m´as corta. Basados en Diccionario: construyen un diccionario con los patrones encontrados, a los cuales se les hace referencia de manera posterior. Algoritmos Predictivos: intentan predecir el siguiente mensaje de la entrada en base a lo que se sabe de la entrada procesada en ese momento.
2.2.
Topolog´ıas de compresi o´ n de datos [5]
La topolog´ıa de compresi o´ n de datos, es una s uper ´ clasificacio´ n de los algoritmos, dentro de los cuales pueden existir algunas o todas las categor ´ıas mencionadas en la Secci´on 2.1, esta clasificaci o´ n permite organizar los algoritmos y/o t e´ cnicas segu´ n su aplicabilidad, por lo cual, es posible que pueda pertenecer a m´as de un grupo. El estudio de compresi´on se basa principalmente en tres tipos de codificaci´on, seg´un la necesidad, pero aun as´ı, esta clasificaci o´ n se reduce a la que se presenta en la Secci o´ n 2.3.
Sin p´erdidas reales : Transmite toda la entrop´ıa4 del mensaje (informaci on ´ b a´ sica5 e irrelevante6 , pero eliminando la redundante 7 ). Subjetivamente sin p e´ rdidas: es decir, adem´as de eliminar la informaci´on redundante se elimina tambi´en la irrelevante. Subjetivamente con p e´ rdidas: se elimina cierta cantidad de informaci o´ n b´asica, por lo que el mensaje se reconstruir a´ con errores perceptibles pero tolerables.
2.3.
¿Compresi´on con o sin p e´ rdida?
El objetivo de la compresi o´ n es siempre reducir el tama n˜ o de la informaci on, ´ sin que afecte al contenido. Pero en algunos casos la compresi on ´ puede afectar la calidad.
Compresi´on sin p´erdida: los datos antes y despu e´ s de su compresi o´ n son exactamente iguales. Una mayor compresi o´ n solo implicar a´ m´as tiempo de proceso (uso principal en la compresi o´ n de texto) [4]. Compresi´on con p´erdida: elimina datos para reducir a u´ n m´as el taman˜ o, con lo que se pierde calidad. Una vez realizada la compresi´on, no se puede obtener la se˜nal original (uso principal en im´agenes, v´ıdeos y sonidos) [3]. 4
5 6
7
“Informaci´ on nueva o esencial, es la diferencia entre la cantidad total de datos de un mensaje y su redundancia.” “Informaci´ on relevante. La que no es ni redundante ni irrelevante.” “Informaci´on que no podemos apreciar y cuya eliminaci´on por tanto no afecta al contenido del mensaje.” “Informaci´on repetitiva o predecible.”
3.
M´etodos de Compresi´on Sin P´erdida
Los algoritmos de compresi o´ n sin p´erdida son tambi e´ n llamado de Sustituci o´ n, ya que la base de este tipo de compresi o´ n (como se mencion o´ en la Secci´on 2) es reemplazar la aparici´on de una frase o grupo de bytes en una hoja de datos, haciendo referencia a una aparicio´ n anterior.
3.1.
Codificaci´on Run-length (RLE)
Este tipo de codificaci o´ n es una de las m a´ s simples de implementar y m a´ s comunes, en la que secuencias de datos con los mismos valores consecutivos son almacenadas como un u´ nico valor m´as su recuento. Ejemplo 2. Sea la cadena de caracteres BANANAAAAAAAAAAAA , aplic´ andole la codificaci´ on RLE, quedar´ıa como 1B 2AN 12A. Representando 17 caracteres en solo 8 o lo que son 17 bytes en tan solo 8.
La codificaci´on mostrada en el ejemplo 2 es aplicable tambi´en a datos binarios, cuyo caso es muy utilizado en el proceso de almacenamiento de im a´ genes. Para el caso binario, el primer byte contiene un n umero ´ que representa el n u´ mero de veces que el car´acter est´a repetido y el segundo byte contiene al propio car a´ cter, en el Algoritmo 1 se presenta un m´etodo de ejemplo con el cual se puede realizar la compresi o´ n Run-Length. Este tipo de codificaci´on realiza una compresi´on de datos sin p´erdida y es muy utilizado en im a´ genes indexadas de 8 bytes o blanco y negro. No funciona tan bien en im´agenes donde var´ıa constantemente el color de los pixels como fotograf ´ıas, aunque JPEG lo utiliza de forma efectiva en los coeficientes que quedan, despu e´ s de transformar y cuantificar bloques de im a´ genes [14].
Algoritmo 1. pu bl ic
s t a t i c String encode ( String source ) StringBuffer dest = n e w StringBuffer ( ) ;
{
/ / r e c o r r e m o s l a c a d en a f o r ( i n t i = 0 ; i < source . length ( ) ; i++) { i n t runLength = 1 ; / / i n i c i a e l c on ta do r a 1 en c ada ← iteracion / / co mparamos s i e l c a r a c t er d e l p a tr o n e s i g u a l a l ← siguiente w h il e ( i+1 < source . length ( ) && source . charAt ( i ) == ← source . charAt ( i +1) ) { runLength++; / / a u me nt a mo s e l c o n t a d o r i ++; / / a v a nz a mo s d e p o s i c i o n
} dest . append ( runLength ) ; / / a gr eg a e l c o nt a do r a l s t r i n g dest . append ( source . charAt ( i ) ) ; / / a gr eg a e l c a r a c te r a l
←
string
} / / i mp r im im o s l a c o d i f i c a c i o n r e t u r n dest . toString ( ) ;
}
fin al
3.2.
Codificaci´on Prefija
Este es otro tipo de compresi o´ n, distinta de RLE, el cual es aplicado com u´ nmente a un co´ digo de largo variable, con la “propiedad de prefijo5 ”, es decir, ninguna palabra del c´o digo debe ser prefijo de cualquier otra palabra en el mismo c´odigo [6]. La codificaci´on Huffman es uno de los algoritmos para obtener c o´ digos prefijo, pero aun as´ı, a los c´odigos prefijos, muchas veces se les llama “c o´ digos Huffman” (Secci on ´ [?]), incluso cuando el co´ digo no se produjo con un algoritmo Huffman. Usando c´odigos prefijo, un mensaje puede transmitirse como una secuencia de palabrasde co´ digo concatenadas. El receptor puede descodificar el mensaje sin ambig uedad, ¨ encontrando y quitando repetidamente los prefijos que forman una palabra de c o´ digo v´alido. Esto no es posible con c o´ digos que no poseen esta propiedad de prefijo [1]. Ejemplo 3. Sea un c´ odigo con las palabras {0, 10, 11} , este posee la propiedad de prefijo, en cambio un c´ odigo como {0, 1, 10, 11} no, porque 1 es prefijo de tanto 10 como de 11 , con lo que un receptor que leyera un 1 al principio de una palabra de c´ odigo no sabr ´ıa es el c odigo completo 1 , o simplemente el prefijo del c´ odigo si este, ´ ´ 10 o 11.
La manera m´as intuitiva para determinar si un c o´ digo es o no Prefijo, es realizando un a´ rbol. En particular utilizando un ´arbol binario de cuatro niveles (en muchos casos no ordenado), es posible generar c´odigo de treinta palabras diferentes: dos palabras de un d´ıgito en el primer nivel (0 y 1), cuatro de dos d ´ıgitos es decir en el segundo nivel (00, 01, 10, 11), ocho de tres d´ıgitos palabras en el tercer nivel, y diecis e´ is palabras de cuatro d´ıgitos en el cuarto nivel. Diferentes tipos de a´ rboles (con m´as niveles, menos niveles, ramas faltantes, etc) puede generar diferentes conjuntos de palabras clave [6]. ´ En un prefijo, ni una palabra de c odigo puede ser un prefijo de cualquier palabra de c´odigo. Por lo tanto, ser´ıa de esperar que si se dibuja un a´ rbol de c o´ digo prefijo, todas las palabras (c´odigo) se deben encontrar en los nodos hoja del ´arbol, como se puede apreciar en la Figura 1, en cambio en la Figura 2, no todos los datos se encuentran en las hojas, lo que genera una codificaci o´ n no prefija. En ambos casos se ha codificado la palabra “ABCDE”. ´ Ejemplo 4. Utilizando el Arbol Binario de la Figura 1 y la cadena ACDEBACE , el mensaje se codifica en: 0110111011111001101111.
Sin embargo, es necesario transmitir junto a la codificaci o´ n, el a´ rbol, en este caso el de la Figura 1, para que el decodificador pueda obtener el resultado, ya que al no utilizar un a´ rbol binario ordenado, no es posible generar el resultado correcto. ´ nica interpretaci´on posiImportancia de ser prefijo: Un c´odigo prefijo, posee una u ble, en cambio, en un c o´ digo no prefijo, este puede codificarse en m a´ s de una forma, generando ambig u¨ edad, ya que partes del c o´ digo poseer´an partes del mismo conjunto al comienzo del elemento. Pero es necesario enviar la secuencia de valores para su decodificaci´on. 5
“Delante de”
Figura 1. Codificaci´on Prefija para la cadena “ABCDE” [6].
3.3.
Figura2. Codificaci´o n no-Prefija para la cadena “ABCDE” [6].
Codificaci´on de Huffman
Como ya se mencion o´ anteriormente, la codificaci o´ n Huffman es un algoritmo usado para compresi o´ n de datos, el cual utiliza una tabla de c o´ digos de longitud variable para codificar un determinado s´ımbolo. Utiliza un m e´ todo espec´ıfico para elegir la representaci´on de cada s´ımbolo, el cual da lugar a un c o´ digo prefijo que representa los caracteres m´as comunes usando las cadenas de bytes m a´ s cortas, y viceversa. Huffman fue capaz de disen˜ ar el m´etodo de compresi o´ n m´as eficiente de este tipo: ninguna representaci´on alternativa de un conjunto de s´ımbolos de entrada produce una salida media m´as peque˜na cuando las frecuencias de los s´ımbolos coinciden con las usadas para crear el c´odigo [7,8]. El algoritmo es ahora probablemente el componente m a´ s prevalente, utilizado en los algoritmos de compresi o´ n, es utilizado en GZIP, JPEG y muchos otros [1].
T´ecnica Ba´ sica: Consiste en la creaci´o n de un a´ rbol binario en el que se etiquetan los nodos hoja, que contienen el s´ımbolo de s´ı mismo, junto al peso (frecuencia de aparici´on) de los s´ımbolos, y de forma consecutiva se van uniendo cada pareja de nodos que menos frecuencia sumen, pasando a crear un nuevo nodo intermedio etiquetado con dicha suma. Se procede a realizar esta acci o´ n hasta que no quedan nodos hoja por unir a ning´un nodo superior, y se ha formado el a´ rbol binario. Posteriormente se etiquetan las aristas que unen cada uno de los nodos con ceros y unos (hijo derecho e izquierdo, respectivamente) y se leen en preorden para clasificar la codificacio´ n de cada elemento [18]. Este algoritmo es mejor si las probabilidades de los s´ımbolos son potencias de 2. Compresi on: ´ El algoritmo utiliza una construcci´on simple utilizando una cola de prioridad, desde el nodo con menor probabilidad al nodo con m a´ s alta probabilidad [9] como se aprecia en el Pseudoc o´ digo 1, el cual describe los pasos para realizar la codificaci o´ n Huffman, cuyo ejemplo de aplicaci on ´ se ve en la Figura 3.
Pseudoc´odigo 1. 1. Se crean varios arboles, ´ uno por cada uno de los s´ımbolos del alfabeto, consistiendo cada uno de los arboles ´ en un nodo sin hijos, y etiquetado cada uno con su s´ ımbolo asociado y su frecuencia de aparici on. ´ 2. Se toman los dos arboles de menor frecuencia, y se unen creando un nuevo arbol. ´ ´ La etiqueta de la ra´ ız ser a´ la suma de las frecuencias de las ra´ ıces de los dos arboles ´ que se unen, y cada uno de estos ´ arboles ser´ a un hijo del nuevo arbol. ´ Tambi´ en se etiquetan las dos ramas del nuevo arbol: ´ con un 0 la de la izquierda, y con un 1 la de la derecha. 3. Se repite el paso 2 hasta que solo ´ quede un arbol. ´
Con el a´ rbol que se genera, es posible conocer el c o´ digo asociado a un s´ımbolo, as´ı como obtener el s´ımbolo asociado a un determinado c o´ digo. Una implementaci o´ n de Huffman, se puede apreciar en el Algoritmo 2, donde se presenta un m e´ todo, el cual se encarga principalmente de generar el a´ rbol, segu´ n lo presentado en el Pseudoc´odigo 1.
Algoritmo 2. p u b l i c Huffman ( String frase ) { alfabeto = n e w ArrayList ( ) ; nodosAlfabeto = n e w ArrayList ( ) ; / / f i l a d e p r i o r i d a d o rd en a da s eg un c a n t i d a d d e c a r a c t e r e s t h i s . filaPrioridade = n e w FilaDePrioridade ( frase ) ; / / largo de la f i l a de prioridad t h i s . numSimbolos = t h i s . filaPrioridade . getSize ( ) ; f o r ( i n t i =0 ; i < t h i s . numSimbolos− 1; i ++) { / / a lm ac en am os l o s d a t o s d e men or p r i o r i d a d e n e l a r b o l NodoHuffman x = t h i s . filaPrioridade . extractMin ( ) ; NodoHuffman y = t h i s . filaPrioridade . extractMin ( ) ; / / s e s um an l a s f r e c u e n c i a s d e a mb os NodoHuffman nodo = new NodoHuffman (”” , x . frequencia + y . ← frequencia ) ; nodo . setEsq ( x ) ; / / a g re ga m os x a l a i z q u i e r d a nodo . setDir ( y ) ; / / a g re ga m os y a l a d e r e ch a / / i n s e r t a m o s e l n od o t h i s . filaPrioridade . insert ( nodo ) ;
} }
Descompresi on: ´ En t´erminos generales, el proceso de descompresi o´ n es simplemente una lectura del a´ rbol de manera prefija a los valores de bytes individuales, por lo general se atraviesa el a´ rbol Huffman nodo por nodo, ya que cada bit se lee desde la entrada (hasta alcanzar un nodo hoja, donde necesariamente termina la b u´ squeda para que el valor de byte en particular), pero s´ı, requiere que el a´ rbol sea reconstruido, es decir, el descompresor tambi e´ n deber´a conocer el a´ rbol [18].
Figura3. Frase “tres tristes tigres” codificada por medio de Huffman
Codificaci´on Shannon-Fano: Esta es una t´ecnica relacionada a la de Huffman y su funcionamiento se presenta en el Algoritmo 2: [11] El algoritmo utilizado para crear los c o´ digos de Huffman es de abajo hacia arriba, y el de los c´odigos de Shannon-Fano es de arriba hacia abajo. Shannon-Fano no siempre genera algoritmo prefijos o´ ptimos, por esta raz o´ n, se utiliza m´as Huffman, ya que es similar en implementaci o´ n, pero siempre obtiene c o´ digos prefijos o´ ptimos. Shannon-Fano se construye de acuerdo a una especificaPseudoc´odigo 2. Un arbol ´ ci´ on dise˜ nada para definir una tabla de c´ odigos efectiva. 1. Para una lista de s´ ımbolos dada, crear su correspondiente lista de probabilidades o de frecuencias de aparici on ´ de manera que se conozca la frecuencia relativa de ocurrencia de cada s´ımbolo. 2. Ordenar las listas de s´ımbolos de acuerdo a la frecuencia, con los s´ımbolos de ocurrencia mas ´ frecuente a la izquierda y los menos comunes a la derecha. 3. Dividir la lista en dos partes, haciendo la frecuencia total de la mitad izquierda lo m´ as pr oxima ´ posible a la de la mitad derecha. 4. Asignar a la mitad izquierda el d ´ıgito binario 0 , y a la mitad derecha el d ´ıgito 1. Esto significa que los c´ odigos para los s´ ımbolos en la primera mitad empezar ´ an con 0 , y que los codigos de la segunda mitad empezar ´ an por . ´ 1 5. Aplicar recursivamente los pasos 3 y 4 a cada una de las dos mitades, subdividi´ endolas en grupos y a nadiendo bytes a los c odigos hasta que cada s´ ımbolo se ˜ ´ corresponde con una hoja del arbol. ´
En la Figura 4 se puede apreciar el esquema de divisi o´ n de la frase “tres tristes tigres”, el cual genera un a´ rbol desde arriba hacia abajo y de derecha a izquierda (menor a mayor), esto permite comprender de forma gr a´ fica el punto 3 del Pseudoc o´ digo 2. En la
Figura 5 se ve el a´ rbol generado de la codificaci o´ n de la frase, siguiendo el Pseudoc o´ digo 2.
´ Shannon-Fano para la codifiFigura4. Esquema de generaci´on del a´ rbol Figura5. Arbol Shannon-Fano (pasos 1 – 3) para la frase caci´on de la frase “tres tristes tigres”. “tres tristes tigres”.
C´odigos Coma: Esta codificaci o´ n tiene el propo´ sito de superar el inconveniente que poseen los c o´ digos Huffman y Shannon-Fano descritos anteriormente, esto es, que si se pierde un bit o si se produce un error durante la transmisi o´ n el receptor interpretar a´ de forma err o´ nea todos los datos. Los c´odigos coma tratan de superar este inconveniente proporcionando una metodolog´ıa en la que si se producen errores de transmisi´on, el receptor se recupere antes del error. Para ello introducen un s´ımbolo de separaci´on entre dos caracteres consecutivos [12]. ımbolos fuente en orden decrePseudoc´odigo 3. Primero se ordena el conjunto de s´ ciente segun ´ la probabilidad de aparici on. ´ Luego, el algoritmo realiza los siguientes pasos: Al s´ ımbolo de mayor probabilidad de aparici on ´ se le asigna un 1 (o un 0). Al siguiente s´ ımbolo con mayor probabilidad de aparicion ´ se le asigna la secuencia 01 (o 10). Al siguiente s´ ımbolo con mayor probabilidad de aparicion ´ se le asigna la secuencia 001 (o 110).
De esta forma se consigue que el 1 (o el 0) sirva como s´ımbolo separador entre las codificaciones de dos s´ımbolos.
3.4.
Codificaci´on Aritm´etica
Esta es una t´ecnica totalmente distinta a las mencionadas anteriormente, en esta, no es necesario que las probabilidades de los s´ımbolos del alfabeto fuente sean potencias
de dos para obtener una eficiencia o´ ptima (como los algoritmos de Huffman y ShannonFano). [11] En la codificacio´ n aritm´etica no se asigna una palabra de c o´ digo a cada uno de los s´ımbolos del alfabeto fuente como se hace en las t e´ cnicas anteriormente vistas. En esta t´ecnica lo que se hace es codificar una secuencia de entrada de s´ımbolos del alfabeto ´ fuente mediante un numero representado en punto flotante [12]. ´ El proceso de codificaci on se basa en asignar a cada s´ımbolo un intervalo (llamado “gama”) entre 0 y 1, tal que la amplitud de cada intervalo sea igual a la probabilidad de cada s´ımbolo y la suma total igual a uno [11]. Previamente es necesario establecer un orden entre los s´ımbolos. No es necesario seguir ningu´ n criterio especial para establecer un orden entre los s ´ımbolos del alfabeto fuente, pero el orden establecido debe ser conocido por el decodificador para poder hacer una correcta decodificaci o´ n en la recepci o´ n [12].
T´ecnica Se le asigna a cada s´ımbolo su propio rango de probabilidad u´ nico, es posible codificar un solo s´ımbolo mediante un valor dentro de su rango. Codificaci´ on: La codificacion ´ de una determinada cadena de entrada se realiza seg u´ n se muestra el Pseudoc´odigo 4 [13].
Pseudoc´odigo 4. limite_inferior = 0 limite_superior = 1 w h i l e ( haya simbolos que codificar ) { rango_actual = limite_superior − limite_inferior limite_superior = limite_inferior + ( rango_actual * limite_superior_del_nuevo_simbolo ) limite_inferior = limite_inferior + ( rango_actual * limite_inferior_del_nuevo_simbolo )
}
← ←
Por u´ ltimo se selecciona un valor dentro del intervalo del u´ ltimo s´ımbolo de la secuencia. Este valor representar a´ la secuencia que queremos enviar. Decodificaci´ on: El proceso de decodificaci o´ n debe comenzar con un valor codificado que representa una secuencia. Por definici´on, para una secuencia dada, el valor codificado estar´a dentro de los l´ımites inferior y superior del rango de probabilidad de dicha secuencia. Puesto que el proceso de codificaci o´ n continuamente restringe los rangos, la entrada codificada tambi e´ n estar´a dentro del rango del primer s´ımbolo codificado. Los sucesivos s´ımbolos codificados se pueden decodificar deshaciendo el escalado que se aplica por cada nuevo s´ımbolo [13]. Para realizar la decodificaci´on de una determinada cadena de entrada se presenta el Pseudoc´odigo 5 [13].
Pseudoc´odigo 5. valor_codificado = entrada_codificada w h i l e ( la secuencia no este completamente decodificada ) {
identificar el simbolo que contiene a valor_codificado en su rango
←
/ / e l i m in a r e f e c t o s d e l s im b ol o r e c i en d e c o d i fi c a d o d e l ← v a l or c o d i f i c ad o rango_actual = limite_superior_del_nuevo_simbolo − ← limite_inferior_del_nuevo_simbolo valor_codificado=( valor_codificado−← limite_inferior_del_nuevo_simbolo ) / rango_actual
}
En la decodificacio´ n hay que determinar bien cuando se debe parar de decodificar. Para este caso se recomienda leer [13] donde se explican y ejemplifican varias formas de realizar este procedimiento. ´ Aritm´etica con Finalmente se menciona que existe de igual manera la Codificaci on implementaci o´ n entera, el que realiza una modificaci o´ n en el c´alculo de la probabilidad, el cual queda determinada entre 0 y un Σc j (n´umero total de ocurrencia de los s´ımbolos).
3.5.
Codificaci´on Basada en Diccionarios
Como se menciono´ en la Seccio´ n 2.1, existe una t´ecnica que genera un diccionario de datos para desarrollar la compresi o´ n. De este tipo, existen 2 clases principales que se mencionan a continuaci´on, las cuales fueron propuestas por Jacob Ziv y Lempel Abraham en 1977 y 1978.
LZ77 Este algoritmo es m´as utilizado que LZ78, ya que tiene tantas decisiones de dise n˜ o que cada uno es implementado de manera distinta a los dem a´ s. Esto hace que no se puedan patentar o que se puedan saltar de una forma u otra las patentes actuales. El esquema LZ77 est a´ basado en un seguimiento de los u´ ltimos N bytes de datos revisados, y cuando se encuentra una frase que ya se ha visto, genera una salida con un par de valores correspondientes a la posici o´ n de la frase en la memoria, y la longitud de la frase. En efecto, el desplazamiento del compresor es de un tama˜no fijo sobre los datos, con la parte de la posici´o n de la tupla (posici o´ n, longitud) que se refieren a la posicio´ nde la frase. Los algoritmos m a´ s utilizados son los derivados de la estructura LZSS descrito por [James Storer y Szymanski Thomas en 1982] [11]. La diferencia principal es en la salida, LZ77 siempre da un desplazamiento, a u´ n si la coincidencia era de un solo byte (en cuyo caso usaban m´as de ocho bytes para representar un byte) de manera que el LZSS usa otro truco para mejorarlo: usa banderas (flags), que ocupan un solo bit y nos informan de lo que viene luego: una literal o un par desplazamiento/tama n˜ o y este algoritmo es el que actualmente usamos, pero el LZSS es com u´ nmente llamado LZ77, as´ı que lo llamaremos LZ77 de este punto en adelante, pero es importante recordar que tambi´en puede ser llamado LZSS. LZSS tambi´en puede usar a´ rboles binarios o ´arboles de sufijos para hacer b u´ squedas m´as eficientes. En esto el compresor mantiene una ventana de tama n˜ o N bytes y un buffer “lookahead” con contenidos a los que se les intenta encontrar una coincidencia [10,11].
La descompresio´ n bastante sencilla, cada vez que una tupla (posici o´ n, longitud) se encuentra, va a la posicio´ n en la ventana de bytes y copia la longitud a la salida. En el caso de recibir un literal, este es copiado tal cual a la salida [10,11]. Tambi´en se ha desarrollado un algoritmo que combina las ideas detr´as de LZ77 y LZ78, generando un h´ıbrido llamado LZFG. Este algoritmo el mismo esquema que LZ77, pero almacena los datos en una estructura de datos trie modificada y produce ´ del texto en el trie [11]. como salida la posici on Los Compresores y archivadores m´as populares (ARJ, LHA, zip, zoo) son variaciones del LZ77.
LZ78 Este algoritmo est a´ basado en esquemas que trabajan mediante la introducci o´ n de frases en un “diccionario” y cuando ocurre una repetici o´ n de una frase, se indexa al diccionario en vez de a la frase. En particular este algoritmo divide la frase, seg´un el esquema de que cada frase es una de las anteriores m a´ s un s´ımbolo [4]. Existen varios algoritmos de compresi o´ n basados en este principio, pero difieren principalmente en la forma en que manejan el diccionario, pero posee varios problemas de propiedad (patentes). El esquema m´as conocido, es el de Terry Welch (LZW), que dise n˜ o´ en 1984 para ser implementados en hardware de controladores de discos de alto rendimiento [11]. Ejemplo 5. Sea la frase ababbabaaabaaabba. El algoritmo la divide y enumera:
a b ab ba baa aba aa bb a 12 3 4 5 6 7 8 9
Como se menciono´ anteriormente: Cada frase es una de las anteriores m as ´ un s´ımbolo, con lo que obtenemos la codificaci´ on siguiente: (0,a) (0,b) (1,b) (2,a) (4,a) (3,a) (1,a) (2,b) (1,) 1 2 3 4 5 6 7 8 9
Algoritmo Lempel-Ziv-Welch Este algoritmo de compresi o´ n sin p´erdida fue desarrollado por Terry Welch en 1984 como una mejora del algoritmo LZ78 desarrollado por Abraham Lempel y Jacob Zib. La clave del m´etodo LZW reside en que es posible crear el diccionario sobre la marcha y de una sola pasada, y en una u´ nica pasada un diccionario de cadenas que se encuentra dentro del texto a comprimir mientras al mismo tiempo se procede a su codificaci´on (analizando y codificando). Dicho diccionario no es transmitido con el texto comprimido, puesto que el descompresor puede reconstruirlo usando la misma l´ogica con que lo hace el compresor y, si est a´ codificado correctamente, tendr a´ exactamente las mismas cadenas que el diccionario del compresor ten ´ıa [1]. LZW se inicia con un diccionario de 4K , de los cuales se refieren a las entradas de 0 a 255 bytes individuales, y las entradas se refieren al 256 − 4095 subcadenas. Cada vez que un nuevo co´ digo generado mediante una nueva cadena ha sido analizado. Nuevas cadenas se generan a n˜ adiendo el K car´acter actual hasta el final de una cadena existente w [10]. El algoritmo de compresi o´ n LZW se puede apreciar en el Pseudoc o´ digo 6.
para comprimir por medio de LZW: Pseudoc´odigo 6. Se presenta el pseudoc odigo ´ Dada una ”frase”de un alfabeto de M letras. Inicializar DICCIONARIO , asignando a cada letra un codigo de 0 ← a M − 1. String = primera letra de la frase w h i l e ( String != EOF ) { Character = siguiente caracter en la frase i f ( String +Character es una palabra del diccionario ) String = String +Character
else{ / / g r eg a r a l d i c c i o n a r i o a s i g n a n d o le u n c o di g o N n o ← utilizado . agregar String +Character al DICCIONARIO String = Character
} } Imprime String
Como se puede apreciar en el Ejemplo 6 y bas´andonos en el Pseudocodico 6, primero se ingresa los caracteres u´ nicos que existan en la palabra, asign a´ ndoles un co´ digo correlativo, luego se comienza a procesar car a´ cter por car´acter la palabra completa, tomando el primero y siguiente, para verificar si su concatenaci o´ n, se encuentra o no en el diccionario, de no encontrarse, se agrega, en caso de que si exista, se toma esa concatenaci´on como el car´acter actual y el siguiente (como se ve en ejemplo (ABA)), y as´ı sucesivamente, finalmente se genera todo el diccionario y se codifica la cadena seg´un los valores del diccionario. Ejemplo 6. Sea la palabra a Codificar: ABACABA
´ String Char Diccionario C odigo A 0 B 1 C 2 A B AB 3 B A BA 4 A C AC 5 C A CA 6 A
AB A
B
A
AB
ABA
7
Con lo que el resultado final ser´ıa: ABACABA = 010230, fij´andonos en la primera columna String para su codificaci o´ n.
3.6.
Algoritmos Predictivos
Como u´ ltimo en el grupo presentado en la Secci o´ n 2.1, est´an los algoritmos predictivos, estos intentan predecir el siguiente mensaje de la entrada en base a lo que se sabe
de la entrada procesada en ese momento. Si el mensaje de la entrada coincide con el predicho la codificaci o´ n se podr´a hacer con menos bytes. En caso contrario se har a´ con m´as bytes (que permitan la sincronizaci o´ n con el descompresor a la hora de mantener las mismas tablas internas; as´ı ya no necesitamos incluirlas en el fichero comprimido). Son adaptativos [10]. En consecuencia suelen ser m a´ s r a´ pidos que las t´ecnicas anteriores, tanto para compresi´on como descompresi o´ n, y adem´as no son dif ´ıciles de programar (s´ı su mejora). Son muy malos cuando hay mucha redundancia, as ´ı que en la pr´actica se suelen usar en conjunci´on con otras t´ecnicas de compresi o´ n para tratar los casos en que hay excesiva redundancia (por ejemplo el Run-Length). De estos algoritmos existen dos m e´ todos que desatacan y se describen a continuaci´on.
Predicci o´ n por Coincidencia Parcial (PPM) Este algoritmo se basa en la predicci o´ n para realizar la compresi´on. Los modelos PPM usan un conjunto de s´ımbolos previos en el flujo de s´ımbolos no comprimidos para predecir el siguiente s ´ımbolo en dicho flujo. Las implementaciones m a´ s recientes de PPM se encuentran entre los mejores sistemas de compresi o´ n sin p´erdida de texto en lenguaje natural. Es una t e´ cnica adaptativa estad´ıstica. Funcionamiento: Las predicciones se reducen normalmente a rankings de s´ımbolos. El n´umero de s´ımbolos previos, n, determina el orden del modelo PPM que se denota con PPM(n). Tambi´en existen variantes donde el contexto no tiene limitaciones de longitud y se denotan como PPM*. Si no se puede realizar una predicci o´ n basada en todos los n s´ımbolos del contexto, se realiza una predicci o´ n con s´olo n−1 s´ımbolos. Este proceso se repite hasta que se alcanza una coincidencia o no quedan m´as s´ımbolos en el contexto. Es en ese punto donde se realiza la predicci o´ n [16]. Implementaci´ on: La seleccio´ n del s´ımbolo actual se guarda usando la codificaci o´ n aritm e´ tica, aunque se puede usar la codificaci o´ n Huffman o incluso alg u´ n tipo de codificaci´on por diccionario. El modelo PPM puede extender para predecir m´ultiples s´ımbolos. Tambi´en es posible usar o a˜nadir modelados diferentes a los de M´arkov. El tama˜no del s´ımbolo es normalmente est a´ tico, t´ıpicamente un u´ nico byte, lo que lo hace gen´erico y f ´acil para el manejo de cualquier formato de fichero [16].
Compresi o´ n de Burrows–Wheeler (BWT) Tambi´en conocida como compresi o´ n por ordenaci´on de bloques, es un algoritmo usado en t´ecnicas de compresi´on de datos como bzip2. Fue inventado por Michael Burrows y David Wheeler en 1994. Cuando se transforma una cadena de caracteres mediante BWT, ninguno de sus caracteres cambia de valor. La transformaci o´ n permuta el orden de los caracteres. Si la cadena original contiene muchas subcadenas que se repiten varias veces, entonces la cadena transformada contendr´a m´ultiples posiciones en las que un mismo car´acter est´e repetido varias veces en una fila. Esto es u´ til para la compresi o´ n, ya que tiende a ser f a´ cil comprimir una cadena que contiene secuencias de caracteres repetidos con t´ecnicas como move-to-front transform y run-length encoding [1,17].
Este algoritmo es muy utilizado en la bioinform a´ tica, donde que usan la transformacio´ n de Burrows–Wheeler para reducir la memoria necesaria para indexar el genoma humano. En el Pseudocodigo 7 se aprecian los pasos para generar la tabla y rotaciones que se presentan en el Ejemplo 7.
Pseudoc´odigo 7. function BWT ( string s ) crear una tabla donde las filas son todas las rotaciones posibles de s , ordenar las filas alfabeticamente r e tu r n ( ultima columna de la tabla ) function invertirBWT ( string s ) crear una tabla vacia repeat length ( s ) times Insertar s como una columna de la tabla antes de la primera columna de la tabla
//
←
l a p r im e ra i n s e r c i o n c r ea l a p r im e ra c ol um na
ordenar las filas de la tabla alfabeticamente r e tu r n ( la fila que acabe en el caracter 'EOF ' )
Ejemplo 7. Sea “@” el car acter ´ de fin de archivo y “ +” el car ´ acter de inicio. La trans formaci´ on se realiza ordenando todas las rotaciones del texto en orden lexicogr ´ afico, y una vez realizadas todas las rotaciones, se selecciona la ultima ´ columna para su compresi on ´ con un algoritmo como RLE.
Transformacio´ n Entrada Rotaciones Ordenadas Salida +BANANA@ ANANA@+B @+BANANA ANA@+BAN A@+BANAN A@+BANAN +BANANA@ NA@+BANA BANANA@+ BNN+AA@A ANA@+BAN NANA@+BA NANA@+BA NA@+BANA ANANA@+B +BANANA@ BANANA@+ @+BANANA Es posible re-generar el documento original a partir de la ultima columna de datos, ´ con lo que no es necesario enviar la tabla original.
En general, como se ve en el Ejemplo 7 este algoritmo, ordena m a´ s que comprime los caracteres, de forma que se creen secuencias repetidas, permitiendo as ´ı aplicar una alguna de las t e´ cnicas de compresi o´ n por agrupacio´ n como lo es RLE.
4.
Algoritmos de Compresi´on Con P´erdida
A pesar de que esta investigaci´on se centra en lo que es la compresi´on de datos, se presentar´a de manera muy simple el concepto de Compresi o´ n Con P´erdida, o lo que viene siendo la compresi o´ n en multimedia (audio, v´ıdeo e im´agenes). Se denomina algoritmo de compresi o´ n con p´erdida a cualquier procedimiento de codificaci´on que tenga como objetivo representar cierta cantidad de informaci o´ n utilizando una menor cantidad de la misma, siendo imposible una reconstrucci´on exacta de los datos originales. ´ exacta no es inLa compresio´ n con p´erdida s´olo es u´ til cuando la reconstrucci on ´ reconstruida es solo dispensable para que la informaci o´ n tenga sentido. La informaci on ´ de la informaci o´ n original. Suele restringirse a informaci o´ n anal´ogiuna aproximacion ca que ha sido digitalizada (im´agenes, audio, v´ıdeo, etc.), donde la informaci´on puede ser “parecida” y, al mismo tiempo, ser subjetivamente la misma. Su mayor ventaja reside en las altas razones de compresi o´ n que ofrece en contraposici on ´ a un algoritmo de compresi o´ n sin p´erdida. Existen dos t´ecnicas comunes de compresi o´ n con p´erdida [15]: Por c´ odecs de transformaci on ´ : los datos originales son transformados de tal forma que se simplifican (sin posibilidad de regreso a los datos originales). Creando un nuevo conjunto de datos proclives a altas razones de compresi o´ n sin p´erdida. Por c´ odecs predictivos: los datos originales son analizados para predecir el comportamiento de los mismos. Despu e´ s se compara esta predicci o´ n con la realidad, codificando el error y la informaci´on necesaria para la reconstrucci´on. Nuevamente, el error es proclive a altas razones de compresi o´ n sin p´erdida. En algunos casos se utilizan ambas, aplicando la transformaci o´ n al resultado de la codificaci´on predictiva.
4.1.
Compresi´on de Ima´ genes La compresio´ n de imagen puede ser: Sin p´erdida: Es la preferida para prop o´ sitos de archivado, im a´ genes m´edicas, dibujo t´ecnico, clip art, o c o´ mics. Se aplican com u´ nmente algoritmos como Huffman, RLE o el que m´as se prefiere, el LZW, ya que es r´apido y fiable, se utiliza en formatos universales como el GIF o el TIFF. Aunque no logra relaciones de compresi o´ n muy altas, normalmente ahorra un tercio del archivo. No nos detendremos en hablar de este tema, ya que se aplican los mismos m e´ todos antes mencionados. Con p´erdida: Son especialmente adecuados para im´agenes naturales tales como fotograf´ıas en aplicaciones donde es aceptable una p ´erdida menor.
Compresi o´ n de Ima´ genes con P´erdida Dentro de esta categor´ıa es universalmente conocido por su eficacia el formato JPEG y otro muy utilizado en el manejo profesional de im´agenes es el m´etodo Fractal, los cuales se describir a´ n a continuacio´ n. La compresi´on basada en la geometr´ıa fractal consigue muy buenos ratios de compresi´on y, en cierta manera, vectoriza las caracter´ısticas de la imagen, de manera que se pueda reconstruir la imagen a diferentes escalas. El principal inconveniente es la lentitud del proceso, debido a la gran cantidad de recursos que exigen los c a´ lculos [19].
El sistema propuesto por el JPEG es una combinaci o´ n de varias t´ecnicas que crea un archivo JPEG (o JPG) con un nivel de compresi o´ n regulable capaz de reducir en algunos casos el peso inform a´ tico de la imagen a menos del 1 %. Se basa en un esquema de codificaci o´ n por transformaci o´ n. Particiona una imagen en bloques, calcula una transformada discreta del coseno (DCT) de cada bloque y los c´odigos de cada componente DCT de acuerdo con un esquema de cuantificaci o´ n en funcio´ n de la magnitud del ´ es mayor para los bloques que son constantes o tienen pocomponente. La compresi on ca variacio´ n, ya que estos pueden ser descritos por s o´ lo unos pocos componentes DCT [21]. Se puede ver que la Figura 6-a) (original) ha sido comprimida, obteniendo el resultado mostrado en la Figura 6-b), a simple vista no es apreciable el cambio o perdida en la imagen, pero haciendo un zoom a la misma, se puede apreciar el “pixelado” (Figura 6-c)), lo que demuestra que se ha perdido informaci o´ n al realizarle la compresi o´ n. Para profundizar m a´ s en este tema se recomienda visitar [19].
a)
b)
c)
Figura6. a) Imagen Original, b) Imagen Comprimida y c) zoom a b)
4.2.
Compresi´on de V´ıdeo
La compresi´o n d e v´ıdeo es la reducci o´ n de la cantidad de datos utilizados para repre´ de im´agenes sentar las im a´ genes del v´ıdeo digital. Es una combinaci o´ n de compresion ´ de v´ıdeo con p´erdida: prey compensacio´ n de movimiento. La mayor´ıa de compresion domina la premisa de que gran parte de los datos antes de la compresi o´ n no es necesaria para lograr la calidad de percepci´on deseada [15]. El procedimiento consiste en analizar una secuencia de v ´ıdeo para que en lugar de transmitir todos los fotogramas consecutivos tan solo se codifique un fotograma y la diferencia entre e´ ste y sus fotogramas cercanos, como se aprecia en el Ejemplo ??. Esto permite que en aquellas secuencias en las que la informaci o´ n es muy redundante (o sea existen muy pocas variaciones entre fotogramas consecutivos) se consigan factores de compresi o´ n muy elevados, ya que la diferencia entre ellos es pr a´ cticamente nula. La mayor´ıa de estas t´ecnicas de compresi o´ n, que se utilizan en la actualidad no se basan ´ de la diferencia entre fotogramas consecutivos, sino que lo tan s´olo en la codificaci on que codifican es la diferencia entre un fotograma y la predicci o´ n del siguiente, lo cual eleva mucho el c´omputo del procesado y permite obtener a cambio un flujo de datos mucho m´as reducido y una imagen de calidad o´ ptima. En la Figura 7 se presenta una secuencia de v ´ıdeo de una persona acerc a´ ndose a un pino, la compresi o´ n, como ya se mencion o´ , solo extrae la informaci o´ n que cambia
seg´un la secuencia de im´agenes, dejando el resto sin cambios, obteniendo el resultado de la Figura 8, donde se puede utilizar la misma imagen del pino y solo hacer que la persona cambie de posici o´ n seg´un sea la secuencia. Para profundizar m a´ s en el tema, se recomienda revisar [15].
Figura7. Secuencias del v´ıdeo por cuadro.
Figura8. Secuencias del v´ıdeo, manteniendo solo los cambios por cuadro.
4.3.
Compresi´on de Audio
Es una forma de compresi o´ n de datos disen˜ ada para reducir el requisito de ancho de ´ digitales de se n˜ ales de audio y el tama n˜ o de almacenamiento de banda de transmisi on ´ de audio se implementan en prograarchivos de audio. Los algoritmos de compresi on mas llamados c o´ decs. Muy rara vez la reducci o´ n del tama n˜ o de los datos es por debajo de 87 % de la original. En la compresio´ n tanto con p´erdida y sin p´erdida, la redundancia de informaci o´ n se reduce, utilizando m´etodos como la codificaci o´ n, reconocimiento de patrones y la predicci´on lineal para reducir la cantidad de informaci o´ n que se utiliza para representar los datos sin comprimir.
Compresi o´ n con p´erdida: Se aprovechan las limitaciones del sistema auditivo humano (margen frecuencial, umbral de audici o´ n, enmascaramiento temporal y/o enmascaramiento frecuencial) para comprimir los datos de audio. Usualmente se utilizan compresiones m´aximas para transmisiones, especialmente cuando son servicios en directo como telefon´ıa (telefon´ıa IP o celular) o reproducciones en directo como podcasting (radio por internet o programas de audio por internet) [20]. Compresi o´ n sin p´erdida: Se utilizan para minimizar el tama˜no del flujo de datos. ´ se utilizan algoritmos basados en la eliminaci o´ n de la Para realizar esta codificaci on redundancia de la se n˜ al de audio, y por lo tanto en el grado de predictibilidad de la informaci´on. Si la se n˜ al tiene patrones repetitivos, e´ ste es redundante y por lo tanto f a´ cil de predecir [20]. Al igual que en casos anteriores para la compresi´on sin p´erdida, se aplican algoritmos como codificaci o´ n de Huffman, codificaci o´ n aritm´etica, Run Length Coding (RLE). Para profundizar m a´ s en el tema, se recomienda revisar [20].
5.
Conclusi´on
Como fue presentado en este documento, existen una clasificaci o´ n general para los distintos algoritmos de compresi o´ n de datos, el primero es la Compresi on ´ Sin P´erdida, el cual se centra en muchos casos, en la b usqueda ´ de patrones, aplicaci o´ n de diccionarios o algoritmos aritm e´ ticos, para su codificaci o´ n. Estos algoritmos permiten que el dato sea reducido en tama˜no, para el prop´osito que el usuario desee, otorgando la particularidad que al descomprimirlo, el dato resultante ser´a 100 % igual al original. Los algoritmos m a´ s emblem´aticos en esta categor´ıa, son los Run Length Coding, co´ 3.1, 3.3, 3.4, 3.5 dificaci´on de Huffman, codificaci o´ n aritm´etica y LZW (ver Secci on respectivamente). Estos algoritmos son aplicables a cualquier tipo de archivo, pero en el caso de los que requieren de patrones para la codificaci´on, ser´an menos eficientes, si no son archivos binarios o de texto, pero poseen la ventaja de que no se pierde informaci´on en ning´un caso. La otra categor´ıa de compresi o´ n que existe es la Compresi o´ n Con P´erdida, esta compresi o´ n es muy utilizada en archivos multimedia (audio, v ´ıdeo, imagen), y existen algoritmos espec´ıficos para cada tipo de dato, y seg u ´ n las necesidades realizan procedimientos y elecciones de que informaci o´ n es o no relevante, eliminando la que no lo sea, y as´ı permitiendo una reducci o´ n del taman˜ o original del archivo. en esta clase de algoritmos, no es posible volver al dato original una vez se ha codificado, por lo que si ´ con p´erdida a un dato, es pose le aplicase muchas veces una t e´ cnica de compresi on sible llegar al punto en que se pierda totalmente la informaci´on. Adem´as, para reducir a´un m a´ s el tama n˜ o, algunos algoritmos, posterior a la codificaci o´ n con p´erdida, aplican alguna de las t e´ cnicas de la compresi o´ n sin p´erdida. Como se mencion o´ al principio, este documento se ha enfocado principalmente en la compresio´ n de datos sin p e´ rdida, pero de igual forma se gener o´ un estudio de la compresi´on con p´erdida, aunque no tan detallada, con el objetivo de enfocar al lector para una investigaci o´ n m´as detallada. Pero cabe decir que a los datos multimedia, es posible aplicarles una compresi o´ n sin p´erdida, solo que el dato no tendr a´ un taman˜ o considerablemente menor al original, ya que los datos multimedia, no siempre tienen ˜ original es demasiado una secuencia o patrones que puedan agruparse o su tama no extenso. Pero esta t´ecnica en multimedia es bastante utilizada en casos, en los que es necesario mantener los datos 100 % originales por motivos generalmente de respaldo o archivo. Finalmente decir que a pesar de que existan variados tipos algoritmos de compresi´on, la gran mayor´ıa realiza una transformaci o´ n que permita generar secuencias repetidas de datos, para luego aplicarles alg´un algoritmo de compresi´on por agrupaci´on como RLE, el cual es aplicado en varios de los c o´ digos presentados anteriormente, sobre todo ´ de im´agenes binarias o en escala de grises, por su secuencia repetitiva en compresion de datos.
Bibliograf ´ıa 1. Guy E. Blelloch (2010). Introduction to Data Compression. Computer Science Department, Carnegie Mellon University, blellochcs.cmu.edu. Extra´ıdo el 30 de Octubre de 2011 desde http://goo.gl/c8gAO
2. Debra Lelewer and Daniel S. Hirshberg. Data Compression. Originally appeared in Computing Surveys 19,3 (1987) 261-297. Extraido el 30 de Octubre de 2011 desde http://goo.gl/iALmr 3. (n.d.) Fundamentos de la compresi´ on de im´ agenes. Laboratorio de Tratamiento Num´ericos de la Se˜nal y de la Imagen. Revisi´on: Jueves 30 de octubre 2003. Extra´ıdo el 30 de Oct ubre de 2011 desde http://goo.gl/w2Ylv 4. (n.d.) Algoritmos de compresi´ on sin p´ erdidas. Pagina Web Sobre Compresi on ´ Inform´atica (PWSCI). M´etodos Basados en Diccionario(3). Revisi´ on: 9 de marzo 2009. Extra´ıdo el 30 de Octubre de 2011 desde http://goo.gl/OhSk7 5. Francisco Jos´e Rico Compresion ´ de Fuente. Departamento de Ingenier´ıa Telem´atica, ETSET de Barcelona, Universidad Polit´ecnica de Catalu˜ na. Extra´ıdo el 30 de Octubre de 2011 desde http://goo.gl/cXztH 6. Kona Macphee (2000). Codes, trees and the prefix property. +plus magazine, Numero 10. Revisi´ on: Enero 2000. Extra´ıdo el 31 de Octubre de 2011 desde http://goo.gl/ lhggB 7. Owen L. Astrachan (2004). Huffman Coding: A CS2 Assignment . Revisi´on: Febrero 2004. Extra´ıdo el 31 de Octubre de 2011 desde http://goo.gl/pvBYX 8. David A. Huffman A Method for the Construction of Minimum-Redundancy Codes. Proceedings of the I.R.E., Septiembre 1952, p a´ gina: 1098-1102 Extra´ıdo el 31 de Octubre de 2011 desde http://goo.gl/5sTjv 9. Antonio S´anchez (2007). Algoritmo de Huffman. Repositorio de Antonio S´anchez. Revision: Marzo 2007. Extra´ıdo el 31 de Octubre de 2011 desde http://goo.gl/jPILb 10. Odiseus Web Compresores. (n.d.). Revision: ´ Junio de 2001. Extra´ıdo el 1 de Noviembre de 2011 desde http://goo.gl/DAapp 11. Peter Gutmann. An Introduction to Data Compression. comp.compression faq (question 70). Extra´ıdo el 1 de Noviembre de 2011 desde http://goo.gl/qewOz 12. (n.d.) C´ odigos de compresi´ on de la informaci´ on. www.isa.cie.uva.es. Extra´ıdo el 1 de Noviembre de 2011 desde http://goo.gl/VobJt 13. (n.d.) Gui´ on de Practica nº 5. (n.d.). Extra´ıdo el 1 de Noviembre de 2011 desde http://goo.gl/mqpTA 14. Daniel Lemire. Run-length encoding. Daniel Lemire’s blog, Montreal, Canada. Revisi´on: Noviembre 2009. Extra´ıdo el 16 de Noviembre de 2011 desde http://goo.gl/3fOzt 15. Jos´e Miguel Perez V. Algoritmos de Compresi´ on de Video, Teor´ıa y Est´ andares. Revisi´on: Septiembre 2005. Extra´ıdo el 17 de Noviembre de 2011 desde http://goo.gl/O4zUJ 16. Mark Nelson. Arithmetic Coding + Statistical Modeling = Data Compression. Data Compression, Magazine Articles. This article first appeared in the February, 1991 issue of Dr. Dobb’s Journal. Extra´ıdo el 19 de Noviembre de 2011 desde http://goo.gl/vg8ne 17. Mark Nelson. Data Compression with the Burrows-Wheeler Transform. Data Compression, Magazine Articles. September, 1996 issue of Dr. Dobb’s Journal. Extra´ıdo el 19 de Noviembre de 2011 desde http://goo.gl/EWkLp ˜ 18. Daniel Mu˜noz. El Algoritmo de Huffman. El Blog de Daniel Mu noz, Revisi´on: Julio 2010. Extra´ıdo el 19 de Noviembre de 2011 desde http://goo.gl/ATH4h 19. Paulo Port. La compresi´ on de im´ agenes. Que Sabes de, Revisi´on: Mayo 2005. Extra´ıdo el 20 de Noviembre de 2011 desde http://goo.gl/Sisco 20. (n.d.) C odec de audio. (n.d.), Revision: ´ Julio 2011. Extra´ıdo el 20 de Noviembre de 2011 ´ desde http://goo.gl/t0nFl 21. J. Angulo and J. Serra. Morphological coding of color images by vector connected filters. In IEEEProc. of the Seventh International Symposium on Signal Processing and Its Applications (ISSPA’2003), Vol. 1, p. 69-72, Paris, France, July 2003. Extra ´ıdo el 25 de Noviembre de 2011 desde http://goo.gl/LyzmB