Sie sind auf Seite 1von 56

Pag.

1-1

1. LA COMPRESIN DE DATOS
1.1. Por qu Comprimir?
En el mundo moderno la informacin se procesa, almacena y transmite cada vez ms en forma digital por medios electrnicos. La informacin digitalizada es bsicamente una secuencia de dgitos, es decir nmeros que representan datos, por lo que se habla comnmente de compactacin o compresin de datos para referirse en general a la compresin de la informacin. Pero cuando se trata de compresin de seales iscronas, donde la temporizacin es importante (tal como audio y video), en vez de compresin de datos se prefiere hablar ms bien de codificacin a baja velocidad (low bit-rate coding), ya que la informacin se codifica para poder as transmitirla a una tasa o velocidad ms baja. Los formatos digitales ms comunes utilizan bits (dgitos binarios) y bytes (tambin llamados octetos = 8 bits), y entonces la compresin de datos consiste simplemente en el proceso de reducir el nmero de bits o bytes utilizados para representar la informacin. La idea principal en que se basan algunas tcnicas de compresin, es que existen secuencias o cadenas de bytes las cuales aparecen varias veces en los datos a comprimir (por ejemplo, palabras comunes repetidas en archivos de texto). Cuando se detectan estas cadenas, se las sustituye por un cdigo especial ms breve. La efectividad de la compresin depende de la longitud de la cadena original y de la brevedad del cdigo que sustituye a dicha cadena. Por ejemplo, si la cadena es la palabra CASA y el cdigo abreviado la sustituye con %, cada vez que aparece esta cadena se obtendra un factor de compresin de 4:1, ya que se estn sustituyendo 4 letras por un smbolo (%). El factor o razn de compresin (FC) se define como: FC = (tamao no comprimido/tamao comprimido) As, FC = 5 (tambin representable como 5:1) significa que el tamao o volumen de los datos comprimidos se reduce a la quinta parte con respecto al tamao original. Esta relacin es anloga a la utilizada en los motores de automviles, donde indica la compresin que sufre de la mezcla de aire y combustible en los cilindros antes del encendido (tpicamente 10:1). Otra expresin que a veces se utiliza es la siguiente: FC = (1-tamao comprimido/tamao no comprimido) Esta expresin significa que, por ejemplo, un bloque de datos cuyo tamao no cambia al comprimirlo, tendr FC = 0 mientras que un bloque que se reduce a la tercera parte de su tamao original, tendr FC = 0.67 y un bloque que se reduce a un tamao 0, tendr FC = 1. Los sistemas de compresin de datos tienen su origen en la necesidad de reducir el espacio en los medios de almacenamiento (RAM, cinta, disco, CD-ROM) y de transferir informacin con ms velocidad sobre las redes de comunicacin. Almacenamiento de archivos en disco Los archivos en el disco duro de una computadora crecen como la hierba y parte de la labor cotidiana de sus usuarios consiste en recuperar espacio para poder almacenar all nuevos archivos. Las utilidades de compresin de archivos pueden ahorrar megabytes de valioso espacio en el disco, almacenando los datos en un formato ms compacto. La compresin de los archivos tambin reduce el nmero de diskettes o CD-ROMs que se necesitan para distribuir libros electrnicos, software educativo y programas de aplicacin en general. Es posible efectuar la compresin de archivos en tiempo real, esto es sobre la marcha, comprimiendo y expandiendo los archivos cuando se usan, en una forma completamente transparente para el usuario y para el propio sistema operativo. Para esto se usa hardware, software o ambos y el resultado es una aparente duplicacin o hasta triplicacin el tamao del espacio disponible en el disco. Transmisin de datos Una llamada telefnica para conectarse a Internet cuesta proporcionalmente al tiempo de conexin. Cuando se trasmiten menos bits comprimiendo los datos, el tiempo de transmisin se acorta, lo cual reduce el tiempo de comunicacin y mejora el tiempo de respuesta. As es posible visualizar ms rpidamente las imgenes en el WWW (World Wide Web) o traer archivos remotos va FTP (File Transfer Protocol). Con la compresin de datos se pueden usar canales de menor ancho de banda (por ejemplo los canales telefnicos), para enviar informacin que tradicionalmente requiere un gran ancho de banda (por ejemplo video y multimedia). En el mundo corporativo, el costo de los servicios de transmisin de datos aumenta a medida que crece la velocidad. Una lnea dedicada de 128 kb/s es ms cara que una similar de 64 kb/s. Con la compresin de datos se puede lograr que una lnea de 64 kb/s se comporte como una de 128 kb/s o ms. Del lado remoto, el descompresor decodifica la informacin de vuelta a su forma original, brindando transparencia de extremo a extremo. Hoy da se aplica la compresin de datos a todo tipo de informacin: texto, voz, msica, imgenes fijas, imgenes en movimiento, grficas de computadora, telfax, bases de datos, telemedida, telecontrol, etc., sin embargo los mtodos utilizados pueden ser muy distintos, debido a las diferentes necesidades de cada una de esas aplicaciones. Por ejemplo, cuando se buscan (quizs poco frecuentemente) registros histricos guardados en discos, la velocidad de descompresin es un factor secundario en comparacin con la necesidad de compactar al mximo esos archivos, que de otra forma ocuparan mucho espacio. Por otro lado, en la transmisin en lnea de datos va mdem, usualmente es muy importante el factor tiempo, y tanto el algoritmo de compresin como el de

descompresin deben ser rpidos. En efecto, si el mdem se va quedar esperando por datos a transmitir (porque el algoritmo de compresin es lento), entonces podra ser preferible comprimir los datos con una tcnica menos efectiva pero ms rpida. Los sistemas de compresin de datos pueden ser evaluados a travs de 4 parmetros representativos. El primero es el tamao o volumen en bytes que ocupa el sistema (en disco o ROM). El segundo es la cantidad de memoria RAM utilizada por el sistema durante la compresin. El tercero es el tiempo requerido para comprimir. El cuarto es el factor de compresin que se logra. Los sistemas de compresin de datos se pueden dividir en dos grandes grupos: con prdidas y sin prdidas. La compresin sin prdidas se basa en tcnicas que garantizan la reproduccin exacta de los datos originales, luego del proceso de compresin y descompresin. ste es el tipo de compresin que se utiliza cuando se procesan base de datos, hojas de clculo, documentos de texto, programas ejecutables, etc., donde la prdida de un solo bit no puede ser tolerada. La compresin con prdidas, como su nombre lo indica, produce una cierta prdida de informacin, pero en cambio logra un factor de compresin muy alto. Esta clase de compresin resulta muy efectiva cuando se procesan digitalmente imgenes fotogrficas, video en movimiento y audio, donde la prdida de informacin se manifiesta como una disminucin de la fidelidad o calidad. Por su propia naturaleza, estas representaciones digitalizadas de seales anlogas no son perfectas debido al error que introduce la conversin analgico/digital, de manera que el hecho que los datos descomprimidos no sean exactamente iguales a los datos originales resulta por lo general tolerable. Cun efectiva es la compresin de datos? La compresin que se logra depende no slo de la tcnica utilizada, sino que tambin de la clase de datos que se estn procesando. Para generalizar, si los datos son aleatorios no se lograr una compresin efectiva; pero si hay redundancia en la informacin, entonces habr mejor compresin. Como cabe esperar, los archivos binarios contienen datos bastante aleatorios y la compresin que se puede lograr es baja. En

Pag. 1-2 cambio, archivos de texto, base de datos, hojas de clculos e imgenes grficas poseen muchos espacios en blanco y redundancia, por lo que se puede lograr una compresin apreciable. La Tabla 1 proporciona una gama aproximada de la relacin de compresin sin prdidas para distintos tipos de archivos. Tipo de archivo Programas ejecutables (.EXE) Documentos de proceso de texto Archivos de texto Archivos de bases de datos Archivos de hojas de clculo Grficos de computadora Relacin de Compresin tpica 1.4:1 a 2:1 2:1 a 4:1 2:1 a 8:1 2:1 a 8:1 2:1 a 4:1 2:1 a 20:1

Tabla 1. Valores de relacin de compresin (sin prdidas)

El objetivo principal de este captulo es estudiar y evaluar las distintas tcnicas de compresin de datos. En la actualidad se dispone de una amplia variedad de tcnicas que utilizan software y/o hardware, las cuales que pueden ser muy distintas una de la otra. Por ejemplo, el algoritmo LZW, utilizado en los archivos grficos con formato GIF, no tiene virtualmente nada en comn con la especificacin G.723 del ITU-T (el antiguo CCITT de la International Telecommunication Union), utilizada para comprimir la voz digitalizada que se transmite por las redes de comunicacin. No vamos a tratar de cubrir con el mismo nfasis todas las distintas variedades de la compresin de datos. Este campo ha crecido en los ltimos aos a un grado tal que ya es materialmente imposible. El lector interesado puede consultar las referencias [1-9] y el documento COMPRFAQ.TXT. La versin ms reciente de este FAQ (Frequently Asked Questions) se puede obtener en ftp://rtfm.mit.edu/pub/usenet/news.answers/compression-faq/. Adems en Usenet hay varios grupos de discusin (newsgroups) dedicados al tema, tal como comp.compression y comp.compression.research.

1.2. Conceptos Bsicos de la Teora de la Informacin


La compresin de datos es quizs una de las aplicaciones donde mejor se pueden apreciar los conceptos desarrollados por la Teora de la Informacin [10-13], la cual es una rama de la matemtica y de la ingeniera elctrica que se origin a finales de los aos 40 con el trabajo precursor del matemtico e ingeniero Claude Shannon en los Laboratorios Bell de la AT&T. Shannon public sus investigaciones en el artculo A mathematical theory of communication del Bell System Technical Journal de 1948, y as se volvi famoso. Sus contribuciones y las de otros investigadores fueron recogidas posteriormente en varias publicaciones del IEEE [14-16]. La compresin de datos forma parte de la Teora de la Informacin sobre todo por su relacin con el concepto de redundancia. En efecto, la informacin redundante presente en un mensaje digital significa que hay un nmero de smbolos o caracteres mayor del mnimo necesario y si se logra eliminarla, entonces habremos reducido el tamao del mensaje. Un concepto fundamental en la Teora de la Informacin es el de codificacin, entendindose con ello y en su significado ms amplio, el procesamiento de la informacin de acuerdo a criterios bien precisos con el fin de mejorar la eficiencia, calidad y confiabilidad, as como garantizar la seguridad y privacidad durante su transmisin o almacenamiento. En los sistemas modernos de comunicaciones, la informacin o mensaje es digital, es decir que est constituida por una sucesin discreta de smbolos pertenecientes a un alfabeto finito. Esto ocurre independientemente del hecho que esa informacin ya sea en su origen discreta (dgitos binarios, telegrafa, etc.) o bien analgica (voz, temperatura, voltaje, etc.), pero convertida a discreta por medio de un convertidor A/D. Se dice que los smbolos son generados por una fuente y a la conversin se le llama formalmente codificacin de fuente.

Un ejemplo tpico lo representa el sistema de modulacin por pulsos codificados (PCM) usado en telefona. Tambin es codificacin de fuente el proceso de compresin de datos mediante el cual la informacin se procesa para que el mensaje codificado posea una longitud ms corta. Los datos a ser comprimidos se pueden considerar como una secuencia de smbolos emitidos por la fuente y el compresor transforma esa secuencia en otra secuencia de cdigos, que a continuacin se enva a un medio de comunicacin (por ejemplo, mdem) o a un medio de almacenamiento (por ejemplo, disco). En este proceso, tanto los datos originales (la fuente) como los datos comprimidos se pueden representar en forma digital, es decir que son secuencias de dgitos binarios. A fin de evitar confusin, es tambin necesario distinguir entre codificacin de fuente y codificacin de lnea, entendindose por esta ltima la operacin de trasformar la informacin en una forma ms adecuada para su transmisin. Por ejemplo, el cdigo AMI (Alternate Mark Inversion) cambia la polaridad de los 1 lgicos consecutivos a fin de eliminar la componente DC de la seal. Como otro ejemplo, el cdigo 2B1Q utilizado para la lnea de abonado en la ISDN (Red Digital de Servicios Integrados) agrupa 2 dgitos binarios (2B) en un smbolo cuaternario (1Q) de 4 niveles, para as reducir el ancho de banda requerido en la transmisin sobre pares de cobre. En las siguientes secciones vamos a analizar la codificacin de fuente con el propsito de comprimir datos. Para entender mejor este proceso, es conveniente introducir ciertos trminos y conceptos bsicos de la Teora de la Informacin. Mensajes de la misma longitud no llevan necesariamente la misma cantidad de informacin, ya que sta depende de la probabilidad de que un determinado smbolo ocurra en el mensaje. Supongamos una fuente de informacin discreta que emite una secuencia de smbolos pertenecientes a un alfabeto de N posibles smbolos s1, s2,......sN. La probabilidad pi que emita el smbolo si permite cuantificar la informacin I que lleva ese smbolo (tambin llamada autoinformacin):
B B B B B B B B B B

Pag. 1-3 La entropa de una fuente es una medida de la informacin promedio que lleva cada smbolo emitido por esa fuente. Esta palabra fue introducida por Shannon en analoga a la entropa de la termodinmica, en el sentido de que mayor es la entropa, mayor es la informacin. Si la probabilidad de ocurrencia de un smbolo particular no depende de que otro haya ocurrido antes (es decir que la secuencia es estadsticamente independiente), la informacin promedio que lleva cada smbolo, es decir la entropa, viene dada por: H=

(-p log p )
i
2 i

bits/smbolo

i =1

I = -log2 pi
B B B

Al usar los logaritmos en base 2, la unidad de informacin es el bit. Esta definicin tiene una buena base intuitiva: por ejemplo, si sabemos con certeza que el siguiente carcter de un bloque de texto que se est comprimiendo es la letra A, entonces p(A) = 1. Como -log21 = 0, entonces I(A) = 0. Esto significa que la ocurrencia de la letra A no lleva informacin, lo cual no es ninguna sorpresa: se sabe que va estar all. En cambio si p(A) = 0.5 sabemos que es igualmente probable que sea una A u otra letra y la informacin que lleva A es -log2 0.5 = 1 bit.
B B B B

Expresado en palabras, esto quiere decir que, en promedio, podemos esperar de obtener H bits de informacin por smbolo, si bien no podemos saber por anticipado cul ser el prximo smbolo y en consecuencia su informacin. En general, la entropa se puede interpretar como una medida de la incertidumbre sobre un evento. El valor mximo de H en la expresin anterior se alcanza cuando todos los smbolos tienen la misma probabilidad de ocurrencia y viene dado por: Hmax = log2N. Cuando la entropa es mxima cada smbolo lleva la mxima cantidad de informacin posible. Esto significa un smbolo binario puede llevar al mximo 1 bit de informacin, un smbolo ternario puede llevar al mximo 1.6 bits de informacin y un smbolo cuaternario puede llevar al mximo 2 bits de informacin. Por ejemplo, si en un mensaje todos los 256 smbolos ASCII fuesen igualmente probables de aparecer (p = 1/256) la entropa de ese mensaje sera -log2 1/256 = 8 bits/smbolo. A este punto es oportuno aclarar bien la diferencia entre bit y dgito binario. Los sistemas de procesamiento digital de la informacin trabajan generalmente con un alfabeto de 2 smbolos (tpicamente 1 y 0), a los cuales de les denomina smbolos o dgitos binarios (llamados tambin binits, aunque esta denominacin no ha tenido gran aceptacin). A la velocidad con la cual se procesan o transmiten esos dgitos binarios se les llama velocidad o tasa binaria (binary rate). N dgitos binarios no llevan necesariamente N bits de informacin, por lo que la tasa binaria Rb (en dgitos/s) es generalmente mayor que la tasa de informacin R (en bits/s), aunque a menudo se habla de bits/s cuando en realidad nos referimos a binits/s. El objetivo de un codificador de fuente (es decir de un compresor), es precisamente tratar de que la salida del codificador tenga una tasa binaria lo ms cercana posible a la verdadera tasa de informacin.
B B B B B B B B

Pag. 1-4

1.3. Modelado y Codificacin


La compresin de datos bsicamente consiste en procesar un conjunto de smbolos de entrada y transformarlos en un conjunto de cdigos. Si la compresin es efectiva, el conjunto de salida tendr un tamao menor que el de entrada. La transformacin de un smbolo (o varios smbolos) en cdigos se basa en un modelo, el cual es simplemente el conjunto de datos y reglas utilizados para procesar los smbolos de entrada y determinar los correspondiente cdigos de salida. El modelado y la codificacin son dos procesos conceptualmente distintos. A menudo se usa el trmino codificacin para referirse al proceso completo de compresin de datos, en vez de nicamente referirse a un componente individual de ese proceso, de manera que uno puede encontrar la expresin codificacin Huffman para describir una tcnica especfica de compresin, cuando en realidad se trata justamente de un mtodo de codificacin usado conjuntamente con un modelo para comprimir datos. El modelado permite caracterizar apropiadamente los datos a comprimir, definir con precisin las probabilidades para los smbolos y generar los cdigos apropiados basado en esas probabilidades. El modelado tiene que ver con la forma cmo vemos los datos para el propsito de la compresin. Lo que se trata es de caracterizar a los datos de manera tal que su ocurrencia pueda ser predicha con bastante precisin. En la figura 1 se representa el esquemticamente el proceso de modelado + codificacin.

Fig. 1. Diagrama de bloques de un compresor

A fin de comprimir los datos eficientemente, se necesita disponer de un modelo que pueda predecir bien las probabilidades de ocurrencia de los smbolos. Segn la clase de datos, existe un modelo que se adapta mejor. As, existe un modelo distinto para los datos de una pgina de telfax, la imagen de video en movimiento y los caracteres de un archivo de texto. El modelo determina el conjunto de eventos a ser codificados y decide cul estadstica se va a usar. Los eventos son piezas de informacin que van a ser codificadas. En un modelo muy simple, los eventos seran los propios smbolos de entrada. Sin embargo en imgenes digitalizadas, por ejemplo, un evento puede ser la diferencia entre un pixel y el pixel previo. Es oportuno recalcar que esta representacin diferencial no cambia el contenido de informacin, ya que la imagen podra ser recuperada completamente; sin embargo, la estadstica de las diferencias es muy distinta de la estadstica de los pixels originales considerados aisladamente. La compresin depende mucho de una correcta estimacin de las probabilidades de los eventos a codificar y si estos no se predicen correctamente, en vez de compresin se puede producir quizs expansin. Esas probabilidades pueden ser determinadas con mayor exactitud si se sabe algo acerca del contexto en que ocurre un evento. Por ejemplo, si ya se sabe que un archivo a comprimir contiene slo texto, que el texto est en castellano y que trata sobre los hbitos de lectura, entonces si durante el proceso de compresin se encuentra la secuencia libr, por el contexto se puede concluir que el siguiente carcter, con mucha probabilidad es la letra o. Pero si el contenido trata sobre presos en crceles, el siguiente carcter es ms probable que sea la letra e. Si bien no es razonable esperar que un sistema de compresin entienda el sentido de un texto, s es posible orientarlo por medio las secuencias encontradas previamente en ese texto. Si todas las ocurrencias de libr en el mensaje estuviesen seguidas por una o, sera

correcto asignar una alta probabilidad a que el siguiente carcter es tambin una o. El modelado de contexto finito se base en una idea conceptualmente simple: calcular las probabilidades para cada smbolo de entrada basndose en el contexto en el cual aparece dicho smbolo. El contexto puede consistir en los smbolos previamente encontrados y el orden del modelo sera entonces el nmero de esos smbolos previos. El modelo de contexto finito ms simple es un modelo de orden 0 que calcula las probabilidades de cada smbolo independientemente de cualquier smbolo previo. Para aplicar este modelo, todo lo que se necesita es una tabla que contenga la cuenta del nmero de veces que cada smbolo ha aparecido en el flujo de entrada. Tomando como ejemplo los smbolos ASCII, con un modelo de orden 0 se requiere una tabla de 256 valores. Un modelo de orden 1 debe manejar 256 tablas distintas de ocurrencias, ya que necesita un conjunto distinto de cuentas para cada posible contexto. De forma semejante, un modelo de orden 2 debe manejar 256256 = 65536 tablas distintas. A medida que aumenta el orden del modelo, aumenta tambin la compresin que se puede conseguir, pero tambin aumenta (exponencialmente) el tamao de la memoria requerida. El grado de compresin que se puede alcanzar depende de la frecuencia relativa de los eventos probables. Cuanto ms probable es un evento, mayor es la compresin que se consigue. El conocer el contexto mejora la compresin ya que se presentan situaciones donde los eventos usualmente ms probables a veces pueden ser menos probables (y viceversa). Por ejemplo en un archivo de texto, el espacio es casi siempre el smbolo ms probable, pero si viene despus de un punto o de una coma, el espacio es an ms probable. Sin embargo despus de la letra q, el espacio es menos probable que la letra u.

Si queremos saber que tan bien se puede comprimir los datos de una fuente, entonces debemos primero determinar su entropa. Pero la entropa slo puede ser derivada a partir de un modelo que estime las probabilidades de los smbolos de entrada. Como hemos visto, el contexto puede causar un cambio condicional en la distribucin de probabilidades de la fuente. Por ejemplo, considrese un modelo que usa una simple distribucin basada en las ocurrencias de los caracteres de un archivo que se desea comprimir. Si en el archivo el 20% de los caracteres son espacios, entonces se podra pensar que la probabilidad del espacio es 0.2. Sin embargo podemos desarrollar un modelo ms sofisticado que tome en cuenta el contexto, por ejemplo si est precedido por una q. Si se presenta esta situacin, la probabilidad de un espacio es mucho menor. Ambos modelos son vlidos, pero el que usa informacin condicional ms relevante lograr una mejor compresin. El tomar en cuenta contextos adicionales basados en informacin relevante, logra el efecto de alterar las probabilidades, bajando el valor de la entropa. Un aspecto importante que debe recalcarse acerca de la entropa es que, a diferencia de la entropa de la termodinmica, no podemos utilizar un nmero fijo, absoluto, para cuantificar el contenido de informacin de un mensaje. Esto es debe a que cuando calculamos la entropa, utilizamos un nmero que representa la probabilidad de un dado smbolo. Este valor en realidad es la probabilidad obtenida a partir de un dado modelo y no un nmero absoluto. Esto significa que si cambiamos el modelo, la probabilidad cambia tambin. Cmo cambian las probabilidades se puede ver claramente cuando se utilizan modelos estadsticos de distinto orden. Un buen modelo permite, por ejemplo, determinar las probabilidades de un smbolo basado en los smbolos que hayan aparecido previamente en el flujo de entrada. Esta nocin aparentemente "inestable" de la probabilidad de un smbolo no pareciera ser muy "natural" y uno preferira que un smbolo tuviera una probabilidad fija, absoluta, que indicara el chance de que realmente ese smbolo aparezca. Para aclarar an ms este punto, consideremos el caso de las imgenes digitalizadas (por ejemplo fotografas), las cuales estn compuestas generalmente por un arreglo matricial de pixels horizontales y pixels verticales. Si se destina un byte para cada pixels, entonces se pueden representar 256 colores (o 256 escalas de gris en un sistema monocromtico). El negro se representa como 0, el blanco como 255 y los valores intermedios corresponden a niveles de gris. Hay muchas maneras de modelar imgenes, siendo el modelo ms simple el que se basa en la frecuencia relativa de cada pixel, determinada a partir del histograma de la imagen. La entropa de la fuente con ese modelo pudiera ser, digamos, de 7 bits/pixel, lo cual significa que se puede conseguir una pobre compresin (8:7). Un modelo ms complejo consistira en utilizar el valor del pixel previo (el pixel a la izquierda) para predecir el valor del

Pag. 1-5 pixel actual. El evento que se codifica aqu es el error de prediccin, esto es, la diferencia entre pixel adyacentes. Con este nuevo modelo se podra bajar la entropa, digamos, a 5 bits/pixel, mejorando as la compresin. El xito de este modelo depende del hecho que la intensidad de la luz (o el color) en una imagen no vara mucho entre pixels cercanos. Los modelos estadsticos pueden ser divididos en 3 clases principales, dependiendo de la forma en que se vayan a determinar las probabilidades relativas: (1) fijos, (2) adaptables de 2 pasadas y (3) adaptables dinmicamente de 1 pasada. El modelo fijo usa la misma estadstica en cada caso. Esta estadstica representa un promedio obtenido a travs del anlisis de un gran nmero de fuentes "tpicas". Estos modelos fijos no comprimen los datos tan bien como los otros, ya que la informacin condicional es menos especfica, como se discuti anteriormente. Sin embargo los modelos fijos permiten algoritmos de compresin ms simples y adems son muy rpidos. Los modelos adaptables de 2 pasadas efectan una primera pasada sobre los datos para acumular estadstica. La segunda pasada comprime los datos usando cdigos especficos basado en esa estadstica. Estos modelos de 2 pasadas comprimen muy bien, pero tienen ciertas desventajas, ya que requieren mayor tiempo de codificacin y una memoria intermedia de almacenamiento. Otro inconveniente es la necesidad de incluir un bloque inicial junto con los datos comprimidos, donde va especificado el cdigo particular utilizado (o la estadstica de la primera pasada) de forma tal que el decodificador pueda interpretar correctamente los datos que le llegan. Los modelos adaptables dinmicamente de 1 pasada, en cambio, ajustan la estadstica a medida que la compresin avanza. Tanto el codificador que el decodificador comienzan con la misma estadstica inicial usada para codificar (y decodificar) los primeros smbolos. Luego la estadstica se actualiza a medida que los datos van siendo procesados. Los modelos adaptables son particularmente indicados para las comunicaciones, ya que no requieren el bloque inicial y generalmente son ms rpidos que los modelos de 2 pasadas. La compresin puede ser hasta mejor que los modelos de 2 pasadas si la estadstica cambia en diferentes partes del archivo, por ejemplo de texto a grfico. El diagrama esquemtico de un sistema que utilice un modelo de esta clase se muestra en la figura 2. El sistema es conceptualmente bastante simple: el compresor y el descompresor empiezan con modelos idnticos para codificar y decodificar. De manera que cuando por el compresor emite su primer cdigo, el descompresor est en capacidad de interpretarlo correctamente. Luego que el compresor emite ese cdigo, procede a actualizar el modelo. Es aqu donde empieza a actuar la naturaleza adaptable del sistema. El modelo de actualizacin toma en cuenta el smbolo que se acaba de procesar y actualiza el valor de la probabilidad asociada a ese smbolo.

Pag. 1-6

(a) Compresin

(b) Descompresin

Fig. 2. Modelo adaptable dinmicamente

Un aspecto importante para que el sistema trabaje correctamente es que el mdulo Actualizar Modelo de la figura debe operar exactamente en la misma manera tanto en la compresin como en la descompresin. Luego que cada smbolo (o grupo de smbolos) ha sido ledo, pasa a ser codificado (o decodificado). Solamente despus que la codificacin (o decodificacin) ha sido completada, es cuando el modelo es actualizado para tomar en cuenta los smbolos (o grupo de smbolos) ms recientes. Un problema con los modelos adaptables dinmicamente es que ellos empiezan a trabajar sin saber prcticamente nada acerca de los datos a procesar, de manera que inicialmente comprimen pobremente, sin embargo esto se compensa por el ahorro que significa el no tener que enviar la informacin estadstica. Adems la mayora de los algoritmos adaptables se acoplan rpidamente al flujo de datos y empiezan a lograr una razn de compresin respetable luego de apenas un centenar o millar de smbolos. De esta manera usualmente se logra una mejor compresin en trminos globales.

El costo de actualizar el modelo significa un cierto problema, tanto en trminos de memoria como tiempo de procesamiento por parte del CPU. Por tal razn los modelos adaptables de orden superior se han hecho factibles slo en los ltimos aos. Es algo irnico el hecho que el costo del espacio en disco y de la memoria RAM est disminuyendo, pero tambin est disminuyendo el costo de comprimir datos. A medida que estos costos continen declinando, va a ser posible aplicar algoritmos todava ms rpidos y eficientes de los actualmente existentes. Una ventaja de los modelos dinmicos sobre los estticos es su capacidad de adaptarse a las condiciones locales. Por ejemplo, cuando se comprime un archivo ejecutable (.EXE), las caractersticas de los datos de entrada pueden cambiar drsticamente a medida que se pasa de la parte de cdigo en s a la parte de datos. Un algoritmo adaptable bien hecho le dar ms importancia a los datos recientes que a los viejos y as ajustar la estadstica de acuerdo a los datos cambiantes.

1.4. Cdigos de Longitud Variable


Hemos hablado acerca de la necesidad modelar la informacin para determinar la probabilidad de los smbolos o eventos y as determinar la entropa, pero no hemos todava explicado cmo codificar los eventos de acuerdo con esa entropa. Lo que hace falta ahora es encontrar formas para transformar los datos (esto es, la secuencia efectiva de eventos determinada por el modelo de los datos) en una secuencia codificada. El procedimiento debe ser reversible y razonablemente veloz. Una forma intuitiva es usar cdigos de longitud variable, donde se asignan cdigos cortos a eventos que ocurren a frecuentemente y cdigos largos a eventos menos frecuentes. En otras palabras, se puede tratar de codificar un smbolo con un nmero de dgitos inversamente proporcional al nmero de bits de informacin que ese smbolo lleva. Los sistemas que usan este principio son conocidos tambin como codificadores de entropa. Por ejemplo, en las computadoras los caracteres usualmente son representados con un nmero fijo de dgitos binarios (8 en ASCII), Pero la letra E ocurre mucho ms frecuentemente que la letra X, as que es poco eficiente el usar el mismo nmero de dgitos binarios para guardar estos 2 caracteres. Si E lleva solamente 4 bits de informacin, entonces debera ser

codificado con exactamente 4 dgitos binarios. As mismo, si X lleva 12 bits, entonces debera ser codificado con exactamente 12 dgitos binarios. Un ejemplo de posibles cdigos de longitud variable para las letras del alfabeto se muestra en la tabla 2 (donde se indican slo algunos elementos).

Frecuencia relativa E 0.1031 T 0.0796 A 0.0642 O 0.0632 I 0.0575 Q 0.0008 Z 0.0005

Letra

Cdigo 10 001 010 0110 11001 11110110 1111111111

Tabla 2. Ejemplo de cdigos de longitud variable

En los cdigos de longitud variable, la longitud promedio es L = pili, donde pi es la probabilidad de ocurrencia del smbolo i-simo y li es la longitud de cdigo i-simo (es decir, el nmero de dgitos binarios). A fin de que todos los cdigos sean decodificables, sus longitudes li deben satisfacer una cierta relacin, conocida como la desigualdad de Kraft, que establece lo siguiente:
B B B B B B B B B B B

2 li
P

1
P

i =1

donde N es el nmero total de palabras codificadas. Como ejemplo, no se puede obtener un sistema de 4 cdigos que tengan longitudes respectivamente 1, 2, 2 y 3 dgitos binarios, ya que la sumatoria da 1.125 (comprubese) y se viola la desigualdad de Kraft. Adicionalmente, un teorema conocido como teorema de codificacin de fuente, establece que, en promedio, los smbolos de entrada no pueden ser representados con menos dgitos binarios que la entropa: L=

Pag. 1-7 Para comprimir datos utilizando cdigos de longitud variable, se necesita un modelo que pueda predecir con alta precisin la probabilidad de los smbolos. Por ejemplo, si la letra E est presente en el 25% de los datos a comprimir, su cdigo podra requerir apenas 2 dgitos binarios. Anlogamente, si la letra Z est presente en el 0.1% de los datos, su cdigo podra requerir 10 dgitos binarios. Pero si el modelo no genera las probabilidades en forma precisa, entonces podra la E podra terminar siendo codificada quizs con 8 dgitos binarios y la Z quizs con 1, causando as una expansin de los datos en vez de su compresin. El modelo tambin debe realizar predicciones que se desven de la distribucin uniforme. Si esto ltimo no ocurre, significa que el modelo no es bueno o que la fuente tiene poca redundancia. Cunto mejor sea el modelo en hacer las predicciones, mejor ser la compresin que se logre. Se podra crear, por ejemplo, un modelo que asigne a todos los posibles smbolos ASCII una probabilidad uniforme igual a 1/256. Este modelo generara entonces un bloque de datos "comprimidos" de salida de un tamao exactamente igual al bloque de entrada, ya que cada smbolo requerira exactamente 8 dgitos binarios para ser codificado. Solamente encontrando probabilidades que se desven de la distribucin uniforme, es como puede reducirse, en promedio, el nmero de dgitos binarios requeridos para representar los datos, logrando as la compresin. Los cdigos de longitud variable tienen varios problemas: Uno de ellos es que un error en un dgito de un smbolo codificado puede alterar la decodificacin de varios smbolos. En consecuencia, una tasa de errores que es tolerable para la transmisin de datos no comprimidos puede ser inaceptable para datos comprimidos. En estos casos pueden ser necesarias tcnicas apropiadas para el control de errores (tal como el chequeo de redundancia cclico, CRC). Otro problema consiste en poder identificar unvocamente los smbolos dentro del mensaje codificado: de hecho, no todo esquema de codificacin que asigna un nico cdigo de salida a un solo smbolo de entrada permite la decodificacin sin ambigedad. El ejemplo de la tabla 3 puede ilustrar este punto.

pili
B B B B

i= 1

Smbolos de entrada A B C D

Cdigo X 1 10 111 101

Cdigo Y 0 10 110 111

donde L es la longitud promedio de los cdigos. Para el ejemplo anterior, la longitud promedio de los cdigos es: 0.10313 + 0.07964 + 0.06424 + = 4.13 dgitos binarios/smbolo, mientras que la entropa es: -0.1031 log2 0.131 - 0.0796 log2 0.0796 + = 4.08 bits/smbolo. Pero slo en el caso de que las probabilidades pi sean potencias negativas de 2 (es decir, pi = 1/2, 1/4, 1/8, ..), se podr cumplir que L = H. Esto significa que la entropa es el lmite inferior para tales tipos de cdigos. Si por ejemplo la entropa de una fuente es de 3 bits/smbolo, cada smbolo se podr codificar en promedio con no menos de 3 dgitos binarios.
B B B B B B B B

Tabla 3. Ilustracin de la condicin del prefijo La decodificacin del tercero y cuarto cdigo X es ambigua, ya que la misma secuencia de dgitos pudiera haberse producido por la combinacin del primero y segundo cdigo. De aqu el requisito de que los cdigos deben satisfacer la condicin del prefijo: ningn cdigo puede ser el prefijo (es decir, la primera parte) de otro cdigo. Esto lleva a la propiedad de decodificabilidad instantnea y significa que un cdigo puede ser decodificado apenas es recibido. Dicha propiedad no es esencial, pero s es til. Un mismo cdigo se puede usar para dos smbolos de entrada distintos, siempre que

cierta informacin adicional contenida en otra parte permita decidir en un dado momento. El cdigo Y arriba mostrado es un ejemplo de cdigo unvocamente e instantneamente decodificable, ya que el cero indica el final del cdigo (unido al hecho de que ningn cdigo puede ser ms largo de 3 dgitos). A tal tipo de cdigo se le llama cdigo con coma (o pausa), ya que se utiliza un smbolo particular (el 0) para marcar el final del cdigo (pausa), excepto para el ms largo, para el cual se reconoce el final por su longitud. El sistema Morse es el ejemplo ms conocido y ms antiguo de cdigos de longitud variable, donde se utilizan combinaciones de punto y raya y las letras de menor frecuencia se codifican en forma ms largas que las letras de mayor frecuencia (Q = --.- A = .- E = .). Este sistema no cumple con la condicin del prefijo y los diferentes cdigos se distinguen porque se separan con un intervalo. Tambin es conveniente que el sistema sea transparente, en el sentido que no imponga restricciones al contenido de los datos que se vayan a transmitir: Una secuencia larga de ceros (donde el cero corresponda a ausencia de seal) podra impedir la extraccin del reloj en un mdem sincrnico. A menudo los datos que se envan a un mdem se procesan previamente con un mezclador (scrambler) para convertir la secuencia en

Pag. 1-8 pseudoaleatoria. La forma ms comn es efectuando una operacin OR exclusivo (XOR) entre los datos y un registro de desplazamiento (shift register) con realimentacin. En el receptor se recupera la secuencia original efectuando otra operacin XOR con el mismo registro de desplazamiento, sincronizado con el del transmisor. Para cualquier conjunto de longitudes de palabras codificadas que satisfaga la desigualdad de Kraft, siempre existir un sistema de cdigos con la propiedad del prefijo. Estos cdigos son particularmente simples de decodificar, ya que basta mirar al inicio de la secuencia a decodificar y buscar en una tabla a que smbolo de entrada corresponde. Luego se pasa a decodificar el siguiente cdigo. Por ejemplo, con el cdigo Y, la secuencia 0110010110 se puede fcilmente agrupar en {0, 110, 0, 10, 110} y as decodificarla. Cmo resolver de forma apropiada toda la serie de problemas y restricciones de los cdigos de longitud variable fue uno de los primeros desafos que atacaron los pioneros de la Teora de la Informacin. Dos mtodos que se encontraron y que merecen especial atencin por su simplicidad y elegancia son el de Shannon-Fano y el de Huffman.

1.5. Codificacin Shannon-Fano y Codificacin Huffman


En los albores de la Teora de la Informacin, a principio de los aos 50, empezaba apenas a asomarse la idea de desarrollar nuevas tcnicas de codificacin eficientes. Los investigadores estaban explorando los conceptos de entropa, contenido de informacin y redundancia. Se pensaba que si se conoca la probabilidad de los smbolos en un mensaje, entonces debera haber una forma de codificar esos smbolos para que el mensaje ocupara menos espacio de almacenamiento. Los primeros trabajos en el campo de la compresin de datos se hicieron antes de la llegada de las computadoras digitales. Hoy parece natural que la Teora de la Informacin se apoye en la computacin, pero justo despus de la Segunda Guerra Mundial no haba virtualmente computadoras digitales, de manera que la idea de desarrollar algoritmos utilizando los nmeros en base 2 para codificar los smbolos fue en verdad un gran salto adelante. Al primer mtodo bien conocido de codificacin en forma efectiva se le conoce hoy como codificacin Shannon-Fano. Claude Shannon en los Laboratorios Bell de la AT&T y Robert Fano en el MIT, lo descubrieron casi simultneamente. El mtodo se basa simplemente en determinar la probabilidad de ocurrencia de cada smbolo en un dado mensaje. Con estas probabilidades se puede construir una tabla de codificacin que tiene varias propiedades interesantes: 1. Los cdigos son nmeros binarios de diferentes longitudes. 2. Los cdigos para smbolos con bajas probabilidades poseen mayor longitud y los cdigos para smbolos con altas probabilidades poseen menor longitud. 3. Aunque los cdigos son de diferentes longitudes, pueden ser decodificados de forma unvoca, sin ambigedad, ya que satisfacen la condicin del prefijo. La codificacin Shannon-Fano se efecta de acuerdo al siguiente procedimiento: 1. Para un dado conjunto de smbolos, esto es un dado alfabeto, obtener los valores correspondiente de probabilidades (o nmero de ocurrencias), de manera que se conozca la frecuencia relativa de cada smbolo. 2. Crear una tabla ordenada de acuerdo a dichas probabilidades, de manera que los smbolos ms frecuentes se encuentren al principio y los menos frecuentes al final. 3. Dividir la tabla en 2 grupos de smbolos, de manera tal que la suma de las probabilidades del grupo superior sea lo ms cercana posible a la suma de las probabilidades del grupo inferior. 4. Asignar el dgito binario 0 a todos los cdigos del grupo superior y el dgito binario 1 a los del grupo inferior. 5. Aplicar en forma iterativa los pasos 3 y 4 a cada una de los dos grupos, subdividiendo los grupos y aadiendo cada vez un dgito binario a los cdigos hasta que no se pueda ms seguir subdividiendo. En la Tabla 4 se muestra un ejemplo sencillo, utilizando un alfabeto de 5 caracteres. La lnea punteada corresponde al paso 3.

Smbolo 1 2 3 4 5

Frecuencia relativa 0.4 0.2 0.2 0.1 0.1

Cdigo 00 01 10 110 111

Tabla 4 Codificacin Shannon-Fano

Ntese que con la codificacin Shannon-Fano se logra que el bloque codificado tenga casi la misma proporcin de unos y ceros. (Esta es condicin necesaria pero no suficiente para que una codificacin ptima). La longitud de cada smbolo codificado se puede conocer de antemano a travs de la relacin: -log2 pi li < -log2 pi+1 y la longitud promedio est acotada por: H L < H+1. Se puede lograr an mayor compresin si en vez de codificar cada smbolo individualmente, ellos se agrupan en bloques de tamao N y se codifica luego cada bloque. En este caso los caracteres codificados tendrn una longitud promedio L acotada por: H L < H+1/N. De manera que usando bloques suficientemente grandes, la longitud se hace muy cercana a la mnima terica H. En base a todo lo expuesto anteriormente, se puede notar la importancia del aporte de Claude Shannon a la Teora de la Informacin en general y a la codificacin en particular. Sus contribuciones y las de otros investigadores han sido recogidas en varias publicaciones [14, 15, 16]. A continuacin se reporta una entrevista que se le hizo a Shannon hace algunos aos, estando an vivo (John Horgan: An interview with Claude Shannon, IEEE Spectrum, April 1992).
B B B B B B B B B B

La codificacin Shannon-Fano signific un gran salto adelante en la bsqueda de mtodos de compresin eficientes, sin embargo fue inmediatamente desplazada por un mtodo an mejor: la codificacin Huffman [17], la cual posee muchas de las caractersticas del cdigo Shannon-Fano. En efecto, los cdigos son nmeros binarios enteros, de longitud variable y los smbolos de mayor probabilidad corresponden a los cdigos ms cortos. Tambin cumplen con la regla del prefijo, lo cual

Pag. 1-9 significa que pueden ser decodificados inmediata y correctamente a pesar de que sean de longitud variable. La historia de cmo Huffman descubri la tcnica est reportada en [18] y se resume a continuacin. En 1952, David Huffman era un estudiante de postgrado en el MIT y estaba cursando la asignatura Teora de la Informacin con el Prof. Robert Fano. A l y a sus compaeros se les ofreci la posibilidad de un trabajo escrito en lugar del examen final. Huffman prefiri hacer el trabajo y le fue asignado por Fano lo que a primera vista pareca un simple problema, esto es encontrar el mtodo ms eficiente para representar nmeros, letras y otros smbolos usando un cdigo binario. Huffman trabaj en el problema durante meses, atacndolo de diferentes maneras, pero ninguna que l pudiera demostrar que era la ms eficiente. Finalmente desilusionado, decidi prepararse para el examen final. Pero justo a punto de botar sus apuntes, se ocurri la solucin y Huffman dice que fue el momento ms singular de su vida. Este logro ha agregado a Huffman a la legin de los ingenieros e investigadores cuyo pensamiento innovador ha ayudado al desarrollo de muchas tecnologas. Huffman tena en esa poca apenas 25 aos. En la codificacin Huffman, que se ilustra en el ejemplo de la figura 3, los smbolos a codificar se colocan primero en una tabla en orden decreciente de frecuencia relativa de ocurrencia. Los dos smbolos menos probables (s4 y s5) se funden provisionalmente en un solo smbolo cuya probabilidad es la suma de las dos (0.2). De esta forma hay que codificar un alfabeto que contiene un smbolo menos que el original. Repitiendo el proceso de reduccin, se llega al punto en que queda un alfabeto con slo dos smbolos, a los cuales se les empieza por codificar con 0 y 1 respectivamente. Efectuando ahora el proceso en sentido inverso, se va aadiendo un 0 y un 1 cada vez que un smbolo codificado se expande en dos, hasta completar la codificacin.
B B B B

Fig. 3. Codificacin Huffman

Pag. 1-10 Huffman demostr que su codificacin es ptima, en el sentido que la longitud promedio L es mnima para un dado modelo con cierta distribucin de probabilidades. En el ejemplo anterior L = pili = 2.2 dgitos/smbolo. El procedimiento sin embargo no es unvoco, ya que la seleccin del dgito 0 o 1 en cada etapa del proceso es arbitraria (pero esto lleva a diferencias triviales). Adems cuando dos probabilidades son iguales, es indiferente cual de ellas se pone por encima en la tabla, pero eso trae como consecuencia que los cdigos resultantes pueden tener distintas longitudes. En todo caso la longitud promedio del bloque codificado sigue siendo la misma. Considrese el caso anterior, esta vez colocando el smbolo combinado tan alto como sea posible (Fig. 4). La longitud promedio sigue siendo de 2.2 dgitos/smbolo, como puede comprobarse si se hacen los clculos. Cul de los dos mtodos se escoge? Un buen criterio es basarse en la variancia, es decir escoger el mtodo cuya longitud promedio vare menos en un conjunto de mensajes. En tal caso el primero posee una variancia de 1.35, mientras el segundo de 0.16, como puede comprobarse. El colocar un estado combinado tan alto como sea posible produce la mnima variancia. La codificacin Huffman, al igual que la de Shannon-Fano, se realiza ms fcilmente como algoritmo computacional utilizando una estructura de datos basada en rbol binario, donde la probabilidad de ocurrencia de un smbolo corresponde a una hoja del rbol. La construccin de rbol de Huffman se
B B B B

lleva a cabo por medio de un procedimiento completamente distinto al que se utilizara en el mtodo de Shannon-Fano. Este ltimo se construye desde la raz hacia las hojas mientras que el de Huffman se construye al revs, empezando desde las hojas del rbol y avanzando hacia la raz. Huffman no invent la idea del rbol de codificacin. Su visin o su aporte original fue que asignando primero las probabilidades de los cdigos ms largos para luego proceder a lo largo de las ramas del rbol hacia la raz, siempre se puede llegar a una solucin ptima. Shannon y Fano haban resuelto el problema en la direccin opuesta: desde la raz hacia las hojas, pero era una solucin menos eficiente. El procedimiento para construir el rbol es simple y elegante, sin embargo antes de describirlo, vamos a introducir algunos conceptos bsicos sobre este tipo de estructura. Un ejemplo tpico de rbol es el rbol familiar (genealgico) y en computacin se acostumbra representar los rboles de cabeza, es decir con la raz arriba. Un rbol ordenado es un rbol en la cual los nodos estn ordenados. As, un nodo y que est directamente debajo del nodo x se denomina descendiente (directo) de x; si x est a un nivel i, entonces se dice que y est a un nivel i+1. Viceversa, se dice que el nodo x es el ancestro (directo) de y. La raz de un rbol se define como localizada en el nivel 0. El nivel mximo de cualquier elemento del rbol es su profundidad o altura.

Fig. 4. Variante de la codificacin de Huffman

Si un elemento no tiene descendiente, se le denomina nodo terminal o bien hoja y un elemento que no es terminal es un nodo interior. El nmero de descendientes (directos) de un nodo interior se conoce como su grado. El grado mximo de todos los nodos es el grado del rbol. De particular importancia

son los rboles de grado 2, a los cuales se les llama rboles binarios, caracterizados por el hecho que los nodos tienen como mximo 2 descendientes. Los rboles binarios son fciles de representar y manipular en las estructuras de datos, ya que cada nodo se caracteriza por 2 punteros a sus descendientes.

Los rboles de grado mayor que 2 se les denomina rboles multicamino. En este caso cada nodo requiere varios punteros pero debe fijarse un lmite superior al nmero de hijos. Si el nmero de hijos vara mucho, esto puede ser una utilizacin poco eficiente de la memoria disponible, ya que quedaran punteros vacos. En este caso en mucho ms conveniente

Pag. 1-11 representar a los hijos como una lista, donde cada hermano apunta al ms joven, mientras que el padre (o el padre y la madre si se prefiere) apunta al hijo mayor. Este principio se ilustra en la figura 5 y es fcil darse cuenta, si se inclina de 45 grados, que es un rbol binario.

Fig. 5. Ejemplo de rbol binario

Volviendo a la codificacin Huffman, en la figura 6 se muestra los rboles correspondientes al ejemplo de las figuras 3 y 4. El proceso de reduccin empieza con los nodos que corresponden a los smbolos a codificar. Se agrupan entonces los 2 nodos con las probabilidades ms bajas para formar un nuevo nodo. En cada nodo se guarda la probabilidad

correspondiente. La estructura del rbol, es decir la conectividad entre los nodos, se logra guardando en cada nodo (hijo) la direccin de uno de los nodos que lo originaron (padre). El proceso sigue hasta que quedan slo 2 nodos para agrupar, formando as la raz, cuya probabilidad es 1.

Figura 6. Ejemplos de rbol de Huffman

Pag. 1-12

El proceso de expansin se puede efectuar de muchas maneras, una de las cuales se explicar a continuacin. Desde la raz se baja por el rbol pasando de hijo a padre y tratando de ir siempre por la izquierda, a menos que la ruta est interrumpida. En cada nodo se toman decisiones basndose en el estado de una bandera o flag (F) en ese nodo, la cual tiene el siguiente significado: F = 0: ruta libre por la izquierda, continuar bajando; F = 1: ruta bloqueada por la izquierda, bajar por la derecha; F = 2: nodo sin salida, regresar al nodo de donde vino y bloquear la ruta al nodo en cuestin (si la ruta era por la izquierda del nodo de donde vino, poner la bandera de ese nodo en 1 y si la ruta era por la derecha, poner la bandera en 2); F = 3: nodo terminal (hoja), terminar de codificar, regresar al nodo de donde vino, bloquear la ruta a esa hoja (si la ruta era por la izquierda del nodo de donde vino, poner la bandera de ese nodo en 1 y si la ruta era por la derecha, poner la bandera en 2). Este procedimiento se puede comparar a una bola de nieve que baja por una montaa y va creciendo a medida que baja. Lo que se va acumulando, en vez de nieve, son 1 y 0 que se aaden al cdigo cada vez que se pasa por un nodo no bloqueado (0 si va por la izquierda, 1 si va por la derecha). Al llegar al fondo se tiene un cdigo completo y el proceso se repite regresando a la raz para as crear otro cdigo. Ntese que los cdigos resultantes difieren de los de la figura 3 y .4. Esto se debe a que en cada nodo la decisin de aadir 0 si se sigue por la izquierda (y 1 por la derecha) es arbitraria. Ahora vamos a comparar las caractersticas de la codificacin Shannon-Fano y Huffman, para lo cual se utilizarn como ejemplo las letras del alfabeto, con la frecuencia relativa tpica que aparece en un texto en ingls (incluyendo el espacio). En la Tabla 5 se muestran los resultados de la codificacin (tambin se incluye como referencia el cdigo Morse utilizado en telegrafa). Obsrvese que el smbolo ms frecuente es el espacio y el menos frecuente la letra Z. La entropa, calculada como H = (-pi log2pi), es igual a 4.08 por smbolo. Para los cdigos Shannon-Fano la longitud promedio, calculada como pili, es de 4.137, mientras que la probabilidad p0 de un cero, calculada como p0 = zipi/lipi, es 0.504 y la probabilidad p1 de un uno es p1 = 1-p0 = 0.496. En estas expresiones pi representa la frecuencia relativa del smbolo original y zi representa el nmero de ceros en el smbolo codificado. Se cumple as la relacin L = pili H. Ntese que la ocurrencia de unos o ceros es prcticamente el 50%, es decir que cada uno y cero lleva casi 1 bit de informacin. Para los cdigos Huffman la longitud promedio es de 4.119 y la probabilidad de un cero es de 0.454. En todo caso la longitud es ligeramente superior al lmite terico H. En general, ambos sistemas son muy parecidos, pero la codificacin Huffman es, en eficiencia, igual o algo mejor a la de Shannon-Fano, de manera que se ha vuelto el mtodo
B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B

preferido de codificacin dentro de esta categora. Como ambos requieren de una capacidad computacional semejante, parece lgico escoger el que logra el mejor desempeo.

Carcter Espacio E T A O I N S R H L D U C F M W Y G P B V K X J Q Z Total:

Frecuencia Relativa 0.1859 0.1031 0.0796 0.0642 0.0632 0.0575 0.0574 0.0514 0.0484 0.0467 0.0321 0.0317 0.0228 0.0218 0.0208 0.0198 0.0175 0.0164 0.0152 0.0152 0.0127 0.0083 0.0049 0.0013 0.0008 0.0008 0.0005 --------1.0000

Cdigo Cdigo Morse Shannon-Fano 111 . 110 101 .1001 .--1000 .. 0111 -. 0110 ... 0101 .-. 01001 .... 01000 .-.. 00111 -.. 00110 ..00101 -.-. 001001 ..-. 001000 -00011 .-000101 -.-000100 --. 000011 .--. 000010 -... 000001 ...0000001 -.00000001 -..000000001 .--0000000001 --.00000000001 --.. 00000000000

Cdigo Huffman 111 010 1101 1011 1001 0111 0110 0011 0010 0001 10101 10100 00001 00000 10011 110010 110001 100011 100010 100001 100000 1100000 11000011 1100001011 1100001010 1100001001 1100001000

Tabla 5. Comparacin de cdigos de longitud variable

Un inconveniente de todos los cdigos de longitud variable es la necesidad de anexar una copia de la tabla de probabilidades al bloque de datos comprimidos, ya que el algoritmo de descompresin no podra decodificar correctamente los datos sin esa tabla. Esta tabla ocupa usualmente un tamao pequeo y en consecuencia no afecta mucho la razn de compresin, especialmente si se trata de bloques grandes de datos. El ejemplo que acabamos de ilustrar se basa en un modelo de orden 0, que no toma en cuenta el contexto. Esto significa que la probabilidad de un dado smbolo se calcul sin considerar los smbolos que lo precedieron en el mensaje. Sin embargo, si se intenta mejorar la compresin utilizando un modelo de orden superior, la penalizacin aumenta de forma significativa. Por ejemplo, si se usan los smbolos ASCII y un modelo de orden 2, habra que transmitir 256 tablas de probabilidades para cada uno de los smbolos, es decir 256256 = 65536 tablas distintas. De manera que al usar una tcnica que permita predecir la aparicin de los smbolos con ms precisin, se incurre en una

penalidad en trminos de una carga adicional. A menos que el bloque a comprimir sea muy grande, la penalidad frecuentemente neutraliza cualquier mejora en la compresin que se derive de aumentar el orden del modelo. Esta situacin parece llevar a un punto muerto: Para comprimir mejor hay que acumular ms estadstica, ya que con eso se logra mayor compresin, pero se pierde en parte la ventaja, ya que hay que enviar ms informacin sobre el modelo. Afortunadamente existe la posibilidad de solventar este dilema, por ejemplo comprimiendo las propias tablas de Huffman que se envan junto con los datos. La tabla consiste bsicamente los N cdigos Huffman correspondientes a los N smbolos del alfabeto utilizado (N = 256 para ASCII). Alternativamente se podran enviar las N probabilidades de los N smbolos. Sin embargo existe una forma ms compacta y consiste en enviar simplemente las N longitudes de los N cdigos. El descompresor puede reconstruir los cdigos a partir de esas longitudes siempre y cuando los cdigos de Huffman se representen en forma cannica [19,20], para lo cual se deben cumplir las siguientes condiciones: 1. Los cdigos de menor longitud son numricamente inferiores a los de mayor longitud. 2. Los cdigos de la misma longitud son numricamente consecutivos, segn el orden de los smbolos que representan. Como ejemplo, los cdigos Huffman de la columna 2 de la Tabla 6 no estn en forma cannica. El cdigo para el espacio tiene valor decimal 7 y es superior a los cdigos para S, R y H (valores 3, 2 y 1), pero debera ser inferior ya que es de menor longitud (no cumple la condicin 1). Los cdigos para el espacio y E deberan ser consecutivos, ya que son de la misma longitud, pero no los son (7 y 2 no son consecutivos). Se puede efectuar una recodificacin para convertirlos en cannicos y el resultado se muestra en la columna 3. Se empieza por tomar el cdigo ms corto (si hay varios, se toma el primero) y se colocan todos sus dgitos en 0, para que sea el nmero ms pequeo. En el ejemplo, el cdigo ms corto (longitud 3) es 111 y se convierte en 000. Luego se modifican todos los cdigos de esa misma longitud para que sea consecutivos. Para obtener el primer cdigo de 4 bits, se incrementa de 1 el ltimo cdigo de 3 bits recodificado y se desplaza de un bit a la izquierda. Lo mismo se hace para los cdigos de 5 bits y as sucesivamente. Con esto se asegura que se cumpla la condicin del prefijo para todos los cdigos. As, para 001 se obtiene 010 al incrementarlo de 1 y luego se obtiene 0100 al desplazarlo 1 bit a la izquierda. Este nmero 0100 va a ser el nuevo cdigo de T. El procedimiento de recodificacin que se acaba de explicar se puede aplicar en forma de algoritmo computacional para determinar los cdigos Huffman a partir de una lista de sus longitudes. Para el mismo ejemplo anterior, esas longitudes seran los siguientes 27 valores: 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5 10, 10, 10, 10 y ellas se pueden enviar en forma todava ms compacta reemplazando los valores repetidos por la pareja cuenta y valor, esto es: 2, 3, 8, 4, 3, 5 4,10. Ntese que en este ejemplo las longitudes corresponden a cdigos ordenados de acuerdo a su frecuencia de ocurrencia, pero no tiene que ser

Pag. 1-13 necesariamente as, ya que podran ordenarse de acuerdo al alfabeto. Lo importante es que el decodificador sepa de antemano cul es ese orden.

Carcter Espacio E T A O I N S R H L D U C F M W Y G P B V K X J Q Z

Cdigo no cannico 111 010 1101 1011 1001 0111 0110 0011 0010 0001 10101 10100 00001 00000 10011 110010 110001 100011 100010 100001 100000 1100000 11000011 1100001011 1100001010 1100001001 1100001000

Cdigo cannico 000 001 0100 0101 0110 0111 1000 1001 1010 1011 11000 11001 11010 110110 110111 111000 111001 111010 111011 111100 111100 1111010 11110110 1111011100 1111011101 1111011110 1111011111

Tabla 6. La forma cannica en la codificacin Huffman

Otra solucin consiste en no enviar las tablas, utilizando en cambio codificacin adaptable, la cual permite utilizar un modelo de orden superior sin pagar la penalizacin por la informacin estadstica adicional. Esto se logra ajustando la tabla de probabilidades sobre la marcha, basndose en los datos previamente procesados y sin tener conocimiento acerca de la estadstica futura. Con la codificacin adaptable, tanto el compresor como el descompresor empiezan con el mismo modelo. El compresor codifica un smbolo utilizando el modelo existente, y a continuacin actualiza el modelo para tomar en cuenta el nuevo smbolo utilizando el modelo existente. De forma similar, el descompresor decodifica un smbolo utilizando el modelo existente y luego actualiza el modelo. En la medida en que el algoritmo para actualizar el modelo opera en forma idntica y sincronizada para el compresor y el descompresor, el proceso opera perfectamente sin necesidad de pasar la tabla con la informacin estadstica desde el compresor al descompresor. Adems de incluir la capacidad de adaptarse, otra forma para que el proceso sea ms eficiente es no codificar aquellos smbolos que nunca son utilizados. Con los cdigos Huffman estticos esto es fcil, ya que al hacer la pasada sobre los datos para determinar su estadstica antes de construir el rbol, ya se sabe cules smbolos nunca son utilizados en un dado mensaje.

De manera que al construir el rbol, simplemente no se incluyen los smbolos cuya cuenta sea cero. Pero con un modelo adaptable no se puede saber por anticipado cules smbolos pueden aparecer en el mensaje. La forma ms sencilla de manejar este problema es inicializar el rbol con todos los smbolos posibles del alfabeto (256 si se usa ASCII) y con una cuenta inicial igual a 1. Cuando se inicia la codificacin, cada cdigo empieza con una longitud de 8 dgitos binarios. A medida que se acumula estadstica, los smbolos ms frecuentes empiezan a utilizar menos de 8 dgitos. Esta forma de codificacin trabaja bien, pero en muchos casos se desperdicia capacidad de codificacin. Particularmente en los mensajes cortos, estos cdigos extras no utilizados distorsionan la estadstica del mensaje y perjudican la compresin. Una mejor forma de manejar este aspecto es empezar el proceso con una tabla vaca y aadir un nuevo smbolo slo cuando aparece por primera vez en el flujo de entrada. Pero entonces surge una aparente contradiccin: la primera vez que el smbolo aparece, no puede ser codificado ya que no existe en la tabla. La respuesta a este dilema es el uso de un cdigo especial

Pag. 1-14 de escape. Este cdigo lo emite el codificador para informar que se va a salir o escapar del contexto actual y as el decodificador sabr que el siguiente smbolo va a ser codificado en un contexto distinto. Se puede entonces utilizar este mecanismo para codificar smbolos que no aparecen en la tabla de Huffman definida hasta ese momento. En el caso de usar smbolos ASCII, significa que el siguiente cdigo va a ser enviado como un smbolo ASCII convencional de 8 dgitos. Este cdigo se aade a la tabla y luego se reanuda la codificacin regular. El Prof. Vincenzo Mendillo ha elaborado un programa llamado precisamente HUFFMAN.EXE, el cual utiliza estructura de rbol binario. El programa permite: (a) Determinar la distribucin de frecuencia de los caracteres ASCII en un archivo y codificar esos caracteres; (b) Codificar con Huffman un alfabeto cuya tabla de probabilidades se encuentra en un archivo; (c) Codificar con Huffman un alfabeto cuya tabla de probabilidades se genera mediante una frmula matemtica; (d) Obtener la forma cannica de la codificacin Huffman a partir de solamente las longitudes de los cdigos.

1.6. Codificacin Aritmtica


El trabajo original de Huffman dio origen a numerosas variaciones del mtodo y domin el mundo de la codificacin hasta principios de los aos 80. Su artculo de 1952 se convirti en una de las referencias ms citadas en el campo de la Teora de la Informacin y probablemente todava lo sea. La codificacin Huffman fue objeto de una enorme cantidad de investigacin adicional y a medida que la potencia de las computadoras fue aumentando, empezaron a aparecer nuevas posibilidades para sistemas de codificacin eficientes. En particular, uno de ellos, la codificacin aritmtica, que fue desarrollada por la IBM a mediados de los 80 [21,22], se puede considerar un buen sucesor de la codificacin Huffman, aunque es ms complicada, tanto conceptualmente como en su realizacin. La codificacin aritmtica surge de la siguiente consideracin: Sera muy conveniente el poder utilizar las probabilidades obtenidas del modelo de los datos a comprimir y construir cdigos que cumplan con la condicin del prefijo y donde adems la longitud binaria de cada cdigo sea igual a la informacin del smbolo de entrada (I = -log2 p), ya que se lograra la mxima compresin. Lamentablemente, a menos que todas las probabilidades sean potencias negativas de 2, las longitudes no corresponden a nmeros enteros. Slo para p = 1/2, 1/4, 1/8, resultara I = 1, 2, 3, es decir, nmeros enteros. En otras palabras, el problema con la codificacin Huffman es que no puede crear cdigos con el contenido de informacin exactamente requerido. La mayor parte de las veces es un poco ms o un poco menos, desvindose con respecto al valor ptimo. El peor caso es cuando hay smbolos cuyas probabilidades son mayores de y que idealmente deberan codificarse con menos de 1 dgito binario, lo cual no es posible. Una posible solucin es combinar varios smbolos en un grupo y codificar el grupo como si fuese un nico smbolo. Como la probabilidad
B B

del grupo es siempre menor que la de sus componentes, combinando suficiente smbolos se puede obtener un evento compuesto cuya probabilidad es menor de . La codificacin aritmtica hace precisamente esto y de hecho no genera un cdigo individual para cada smbolo, sino que ms bien genera un cdigo para el mensaje entero. Cada smbolo que se aade al mensaje modifica en forma incremental el cdigo de salida. Esto representa una mejora, ya que el efecto de cada smbolo de entrada sobre el cdigo de salida puede ser un nmero fraccionario, en vez de entero. De manera que si, por ejemplo, el contenido de informacin del carcter E es 2.5 bits, es posible aadir exactamente un valor de 2.5 al cdigo de salida. La codificacin aritmtica puede manejar la codificacin de smbolos cuya probabilidad es mayor de 1/2, as como tomar ms fcilmente en cuenta el contexto. Vamos a ilustrar la codificacin aritmtica con la ayuda de la figura 7. El proceso empieza identificando un intervalo grueso entre 0 y 1 (valores decimales, no binarios) y cada evento sucesivo codificado va afinando ese intervalo. En cada paso el codificador recibe un smbolo junto con la probabilidad asociada a todos los posibles eventos. Al concluir, se obtiene un nmero decimal fraccionario comprendido entre 0 y 1. Durante el proceso, el codificador recuerda el punto ms a la izquierda en el intervalo y el ancho del intervalo. Al empezar, se dispone del intervalo completo comprendido entre 0 y 1, pero en cada paso sucesivo se le asigna a cada smbolo de entrada una fraccin del intervalo anterior, en forma proporcional a su probabilidad.Supongamos un alfabeto de slo 3 smbolos de entrada A, B, C y cuyas probabilidades sean 1/2, 3/8, 1/8 respectivamente. Entonces en el paso 1, a A se le asigna 1/2 del intervalo, a B se le asigna 3/8 y a C se le asigna 1/8. Si llamamos al cdigo de salida S (que va a ser un nmero decimal no entero), el primer smbolo de entrada nos dice cmo

Pag. 1-15 acotar la salida, es decir: Ntese que 0.875 es igual a 0.5 + 3/8 del segmento total. Si es A, entonces 0 S < 0.5 Si es B, entonces 0.5 S < 0.875 Si es C, entonces 0.875 S < 1

|------------------------------- A ------------------------------|-------------------- B ------------------|-------- C ---------| 0.0 0.5 0.875 1.0 (a) Paso 1

|----------------------------------------------------------------|------ BA ----|---------- BC ----------|---------------------| 0.0 0.5 0.625 0.875 1.0

(b) Paso 2

|------------------------------------7---------------------------|--------------|----- BCA ------|- BCB-|---------------------| 0.0 0.5 0.625 0.825 0.875 1.0

(c) Paso 3 Fig 7. Ejemplo de codificacin aritmtica

Despus de codificar el primer smbolo, en el paso 2 se subdivide el intervalo S de acuerdo a la probabilidad del siguiente smbolo. Supongamos que el primer smbolo fue B y que el segundo smbolo pueda ser A (con probabilidad 1/3), B (con probabilidad 0) o C (con probabilidad 2/3). La regla para acotar la salida es ahora: Si es A, entonces 0.5 S < 0.625 Si es C, entonces 0.625 S < 0.875 Ntese que 0.625 es igual a 0.5 + 1/3 del segmento asignado a B. Despus de codificar el segundo smbolo, en el paso 3 se subdivide el intervalo S de acuerdo a la probabilidad del siguiente smbolo. Supongamos que el segundo smbolo fue C y que el tercer smbolo pueda ser A (con probabilidad 4/5), B (con probabilidad 1/5) o C (con probabilidad 2/3). La regla para acotar la salida es ahora: Si es A, entonces 0.625 S < 0.825 Si es B, entonces 0.825 S < 0.875 Ntese que 0.825 es igual a 0.625 + 4/5 de segmento asignado a BC. Este mtodo se repite luego para cada smbolo sucesivo de la secuencia de entrada. Al finalizar se sabe que la salida corresponde a un cierto intervalo bien definido. Todo lo que

tenemos que hacer es emitir a la salida un nmero con suficiente precisin que decodificador sepa de qu intervalo se trata. Es ste es el aspecto crucial y se puede entender mejor con referencia a la figura 7.c. El cdigo para BCA requiere un nmero de 1 cifra decimal para unvocamente determinar el segmento que le corresponde (por ejemplo. 0.7), mientras que el cdigo BCB requiere 2 cifras (por ejemplo 0.84). En otras palabras, la longitud de nmero (esto es, del cdigo) es inversamente proporcional a su probabilidad. En la prctica no se usan nmeros decimales, sino binarios y el proceso se asemeja a una conversin analgico-digital, donde los bits de resolucin dependen del intervalo asignado a S. Si 1/8 S < 1/4, entonces se van a requerir 3 bits, si 1/16 S < 1/8 se van a requerir 4 bits, si 1/32 S < 1/16 se van a requerir 5 bits y as sucesivamente. Para BCA el intervalo asignado a S es 0.825 - 0.625 = 1/5, esto es, algo ms de 1/8, por lo que se requieren 3 bits y su cdigo ser 0.101 en binario, esto es 5/8. Para BCB el intervalo asignado a S es 0.875 - 0.825 = 0.050, esto es algo ms de 1/32, por lo que se requieren 5 bits y su cdigo ser 0.11011 en binario, esto es 27/32. Para mayor facilidad de cmputo, se puede eliminar el punto de la fraccin y trabajar con nmeros binarios enteros, quedando BCA codificado como 101 y BCB como 11011. Como a cada smbolo se le asigna una fraccin del intervalo actual proporcional a su probabilidad, la longitud del cdigo se va incrementando de acuerdo a la informacin del smbolo entrante, que es lo ptimo. Es decir que con los cdigos

aritmticos, la longitud es proporcional a la informacin de los smbolos de entrada, aun cuando esa informacin sea slo una fraccin de bit (esto es, aun cuando la probabilidad de un smbolo sea mayor de 1/2). La decodificacin se basa en el mismo mtodo y utiliza la misma estadstica. Examinando los cdigos recibidos y conociendo la estadstica, se pueden determinar fcilmente los smbolos correspondientes. En conclusin, la codificacin aritmtica permite hacercarse

Pag. 1-16 mucho ms al contenido real de la informacin, logrando una mejor compresin, pero requiere ms potencia computacional de la que era usualmente disponible hasta hace poco. Todava hoy da generalmente sufre la desventaja de una velocidad significativa en velocidad en comparacin con otros mtodos de compresin populares, sin embargo es una de las soluciones ms convenientes cuando el costo de almacenar o enviar informacin es muy alto.

1.7. Compresin LZ77 y LZM


Hasta finales de los aos 70 la mayora de los sistemas compresin utilizaban modelado estadstico, como los explicados anteriormente: Se lee un smbolo (o varios smbolos) y se codifica de acuerdo a su probabilidad obtenida a partir de un modelo estadstico. Pero dos jvenes matemticos israeles, Abraham Lempel and Jacob Ziv, propusieron en 1977 un novedoso mtodo de compresin basado en diccionario, con el cual se poda alcanzar tasas de compresin impresionantes. Este mtodo fue descrito en el artculo "A universal algorithm for sequential data compression" de la revista IEEE Transactions on Information Theory de mayo 1977 y por tal razn posteriormente se le denomin compresin LZ77 [23]. Al contrario de la codificacin Huffman, la compresin basada en diccionario no codifica smbolos individuales de longitud fija en forma de cdigos de longitud variable, sino que codifica cadenas de smbolos, esto es secuencias de longitud variable, por medio de cdigos de longitud prefijada. Bsicamente los que se hace es leer una cadena de smbolos de entrada y se busca en un diccionario guardado en memoria. Si la cadena se encuentra en ese diccionario, se enva a la salida un cdigo que representa un ndice o puntero al diccionario donde ella se encuentra guardada. Un simple ejemplo de cmo funciona conceptualmente, se puede ilustrar por medio de un diccionario de verdad como el Pequeo Larousse (o la gua telefnica). Entonces un cdigo de salida como 3/325 podra significar buscar y extraer la tercera palabra en la pgina 325 del diccionario. Un diccionario de verdad contiene palabras, pero aqu se manejan cadenas de smbolos (por ejemplo ASCII). Estas cadenas (strings) pueden ser muy largas, por lo que son ms bien frases y no palabras. Se logra la compresin si los cdigos son ms cortos que las cadenas que representan. En un caso simple como el ilustrado, puede ser conveniente un diccionario predefinido, esttico. Este diccionario se construye antes de efectuar la compresin y no cambia durante el proceso. Una de sus mayores ventajas es que no necesita ser enviado al descompresor. Se utiliza un diccionario esttico al igual que la lista de referencia en un artculo de una revista. A lo largo del texto en el artculo, el autor inserta un nmero que apunta a una lista de referencias, en vez de escribir el ttulo completo del trabajo referenciado. En este caso el diccionario es esttico ya que construye y se transmite conjuntamente con el texto, y el lector no tiene que construirlo por su cuenta. Cada vez que se ve un nmero entre corchetes en el texto, por ejemplo [2], se sabe que apunta a un sitio en el diccionario esttico. El problema con un diccionario esttico es similar al problema que se enfrenta con un modelo estadstico: Se requiere transmitir el diccionario junto con el texto, lo cual resulta en una carga adicional que se aade a los datos comprimidos. Este problema se puede evitar utilizando un esquema de diccionario adaptable, dinmico. Los seres humanos estamos acostumbrados a una forma de diccionario adaptable cuando realizamos la sustitucin de acrnimos en libros y revistas. La manera corriente de usar este diccionario adaptable es deletrear el acrnimo y luego poner su sustitucin abreviada entre parntesis. As, la primera vez que se mencione en un texto a la Universidad Central de Venezuela (UCV), se define tanto la frase completa en el diccionario y su sustitucin (UCV). De all en adelante, al referirse a la UCV en el texto, debera automticamente evocar una sustitucin mental. Con la compresin adaptable, en vez de tener un diccionario predefinido desde el mismo inicio de la compresin, se empieza sin diccionario o con un diccionario muy pequeo. A medida que la compresin avanza, el algoritmo aade nuevas cadenas para ser utilizadas posteriormente como cdigos. La compresin basada en LZ77 es del tipo adaptable y se caracteriza adems por las siguientes propiedades: Es universal, en el sentido de que no se requiere conocer nada en particular acerca de las caractersticas de los datos que se quieren comprimir. Como no es necesario determinar previamente la estadstica de esos datos, el algoritmo puede operar sobre la marcha, es decir que la compresin se efecta con una sola pasada sobre los datos a comprimir. No produce prdida de informacin, ya que los datos originales se recuperan completamente en la descompresin, sin ningn tipo de error (siempre y cuando, por supuesto, no haya habido errores durante el almacenamiento en disco o durante la transmisin de los datos comprimidos). En LZ77 el diccionario consiste de todas las cadenas o frases existentes en una porcin previa del mensaje. El mtodo se basa en el reconocimiento de cadenas de smbolos ya existentes en esa porcin previa del mensaje. A este proceso se le conoce en ingls como parsing y es anlogo al anlisis gramatical de una palabra o frase. A medida que se va construyendo la cadena de entrada, se comprueba si esa cadena ya exista en la porcin previa del mensaje. Si se encuentra una concordancia, se codifica como un puntero y se enva al flujo de salida. Si no

es as, se enva a la salida otro tipo de cdigo. El proceso se repite hasta codificar todos los datos de entrada. Para entender mejor el proceso de codificacin, imaginemos que estamos viendo los datos de entrada (alineados de izquierda a derecha) a travs de una ventana deslizante en la cual caben N smbolos. Esta ventana es el diccionario dinmico. Los datos visibles en la ventana (que en el fondo es un buffer) son los ms recientes N smbolos, que ya fueron codificados. Los prximos smbolos a codificar se encuentran fuera de la ventana, en un look-ahead buffer, de tamao B, que contiene los smbolos que han sido ledos del flujo de entrada pero que todava no han sido codificados. La ventana posee un tamao de varios miles de caracteres, por ejemplo N = 32 KB, mientras que el buffer es por lo general mucho menor, por ejemplo B = 256 bytes. En cada iteracin solamente se toman en cuenta los N smbolos en la ventana, los cuales se exploran buscando una cadena igual al contenido del buffer. En el caso ms afortunado, se encontrar una cadena de longitud B, pero en general ser menor o inclusive nula. En su forma original, tal como fue propuesta por Lempel y Ziv en su artculo, los cdigos a la salida del compresor se componen de 3 partes: 1. La posicin P dentro de la ventana donde se encuentra la cadena (contando desde 0 a partir del extremo izquierdo de la ventana) 2. La longitud L de la cadena (contando a partir de 0) 3. El siguiente smbolo S en el buffer. L = 0 se reserva para cuando no se consigue ninguna cadena en la ventana. Por ejemplo, si el siguiente smbolo en el buffer es X y no se encuentra en la ventana, entonces el cdigo de salida sera 0,0,X (El 0 utilizado aqu para especificar la posicin no es relevante y podra ser cualquier otro valor). Si bien este mtodo no es muy eficiente, as se asegura que se pueda codificar cualquier cadena de entrada. La posicin P de las cadenas puede variar entre 0 y N-1 y para representar P en el mismo alfabeto m-ario se requerirn logm N smbolos, (donde x es el entero ms pequeo igual o mayor que x). La longitud L de las cadenas puede variar entre 0 y B-1 y para representar L en el mismo alfabeto de entrada, se requerirn entonces logm B smbolos. El total de smbolos, esto es la longitud LC del cdigo de salida ser entonces:
B B B B B B

Pag. 1-17 alfabeto ternario se requerirn entonces log3 8 = 2 smbolos. La longitud L de las cadenas puede variar entre 0 y 8 y para representar L en un alfabeto ternario se requerirn tambin 2 smbolos. En total, el cdigo de salida requerir 2+2+1 smbolos. Si la cadena que se codifica es ms larga de 5 smbolos, entonces esa cadena queda comprimida. Supongamos ahora que la cadena de entrada a codificar va a ser la siguiente: 001010210210212021021200 Inicialmente cargamos la ventana 9 ceros y el buffer con los primeros 9 elementos de la cadena, tal como se muestra a continuacin:
B B

Si empezamos a buscar desde el extremo derecho de la ventana, vemos que la pareja repetida ms larga es 00, luego L = 2. Su posicin es P = 9-1 = 8 (aunque en este caso puede ser cualquier otro valor entre 1 y 8). Ntese que la cadena se sale de la ventana y prosigue en el buffer, lo cual es permisible. El siguiente smbolo S en el buffer es 1. El cdigo de salida sera entonces 8,2,1. Ntese sin embargo que aqu estamos representando P y L con cdigo decimal y S con cdigo ternario. Si utilizamos cdigo ternario, tenemos L = 02, P = 22 y S = 1. (Es fcil comprobar que 22 en ternario es igual a 8 en decimal ya que 231 + 230 = 8). Luego el cdigo de salida ser 22021 (las comas de separacin no hacen falta en la decodificacin si se conoce de antemano la longitud de cada parte del cdigo). En este caso estamos codificando 2 smbolos de entrada con 5 smbolos de salida, lo cual por supuesto es una expansin y no una compresin. En esta primera iteracin se han procesado los 3 primeros caracteres del buffer, los cuales pasan ahora a ser visibles dentro de la ventana, para lo cual se desliza la ventana L+1 posiciones a la derecha. Simultneamente otros 3 smbolos se introducen en el buffer y otros 3 smbolos se salen de la ventana por la izquierda. De esta forma se desechan los smbolos ms antiguos. La situacin para la segunda iteracin es la siguiente:
P P P P

LC = logm N + logm B +1
B B B B B B

Por ejemplo, si se usa el alfabeto ASCII de 256 smbolos (m = 8), una ventana de tamao N = 512 smbolos y un buffer de tamao B = 64 smbolos, entonces LC = log8 512 + log8 64 +1 = 3+2+1 = 6. As, en el cdigo de salida ABCDEF, ABC representa la posicin P, DE la longitud L y F el siguiente smbolo S. Si la cadena de entrada que se codifica es ms larga de 6 smbolos, entonces esa cadena queda comprimida. Vamos a ilustrar con ms detalles estos conceptos por medio del mismo ejemplo utilizado en el famoso artculo de Lempel y Ziv antes citado. Consideremos una ventana de N = 9 posiciones, un buffer de B = 9 posiciones y un alfabeto ternario compuesto por los smbolos 0,1,2. La posicin P de las cadenas puede variar entonces entre 0 y 8 y para representar P en un
B B B B B B

Ahora la pareja repetida ms larga es 010, luego L = 3. La posicin es P = 7. El siguiente smbolo S en el buffer es 2. El cdigo de salida es entonces 7,3,2, es decir 21102 en alfabeto ternario. En esta segunda iteracin se han procesado otros 4 caracteres del buffer, los cuales pasan ahora a ser visibles dentro de la ventana, para lo cual se desliza la ventana 4 posiciones a la derecha. Simultneamente otros 4 smbolos se introducen en el buffer y otros 4 smbolos se salen de la ventana por la izquierda. En este caso estamos codificando 3 smbolos de entrada con 5 smbolos de salida y tampoco hay

compresin. La situacin para la tercera iteracin es la siguiente:

Ahora la pareja repetida ms larga es 1021021, luego L = 7. La posicin es P = 6. El siguiente smbolo S en el buffer es 2. El cdigo de salida es entonces 6,7,2, es decir 20212 en alfabeto ternario. En este caso estamos codificando 7 smbolos de entrada con 5 smbolos de salida y s hay compresin. Ntese entonces como LZ77 produce compresin slo cuando logra conseguir cadenas repetidas largas. En caso contrario hay expansin en vez de compresin. Puede ocurrir que dentro de la ventana no haya ni un solo smbolo que coincida con el primer smbolo X en el buffer. En tal caso el cdigo de salida sera 0000X. A continuacin la ventana se desliza de una sola posicin. En la prctica la posicin P y la longitud L se codifican como bytes de 8 bits o semi-bytes (nibbles) de 4 bits. El siguiente smbolo S se codifica en ASCII. Si por ejemplo se usa una ventana de 4096 bytes y un buffer de 16 bytes, se requieren 12 bits para representar la posicin y otros 4 bits para representar la longitud. Un smbolo ASCII de 8 bits como (por ejemplo S) que no exista en la ventana, se codificara como 0,0,S y requerira 12 + 4 + 8 = 24 bits en vez de 8. Esto es un costo muy alto y se puede mejorar, como se ver ms adelante cuando se explique la compresin LZM. Visto en retrospectiva, la idea sobre la que se basa LZ77 no es particularmente notable, y es conceptualmente lo suficientemente simple para que el mtodo pudiese haber sido propuesto muchos aos antes. Con LZ77 y sus modernas variantes se pueden lograr algoritmos de compresin eficientes y rpidos ya que la codificacin es relativamente simple. Se pueden escribir fcilmente aplicaciones en lenguaje de alto nivel o en Assembler. Programas como PKZIP y LHARC utilizan variantes del algoritmo LZ77 y se han vuelto muy populares para comprimir archivos en general. Ellos son muy efectivos para explotar la redundancia que existe en patrones que se repiten varias veces (archivos de texto, programas fuentes e ejecutables, bases de datos, grficas de computadoras) pero no son particularmente buenos para comprimir audio e imgenes digitalizadas. Los sistemas de compresin LZ77 (as como la mayora de

Pag. 1-18 los dems) son asimtricos: La rutina de compresin es complicada y debe realizar bastante trabajo para cada cadena que comprime. En cambio, la rutina de descompresin es muy simple. Tiene poco trabajo que efectuar y de hecho puede operar casi tan rpidamente como una rutina ordinaria de copiado. Esta caracterstica hace que LZ77 sea ideal para datos que son comprimidos una sola vez, pero que son descomprimidos muchas veces (por ejemplo los programas que se distribuyen a travs de discos o a travs de Internet). A continuacin se describe una variante de LZ77 desarrollada por el Prof. Vincenzo Mendillo a fin de mejorar el esquema bsico propuesto por Lempel y Ziv. Esta variante, llamada LZM (M de Mendillo) utiliza un cdigo de 2 o 3 partes. Cuando se consigue una coincidencia en la ventana, se usa el cdigo F,L,P donde F es una bandera (flag) de apenas 1 bit que se pone en 1 para indicar que se encontr una coincidencia. El siguiente trmino L indica la longitud de la cadena encontrada y el ltimo P indica su posicin con respecto al extremo derecho de la ventana. Cuando no se consigue una coincidencia, se usa el cdigo F,C donde F es la bandera de 1 bit que ahora se pone en 0 para indicar que no se encontr una coincidencia. El siguiente trmino C es el primer carcter o smbolo en el buffer (para el cual no se encontr coincidencia). Para entender el funcionamiento de LZM, es conveniente considerar a los datos de entrada como un mensaje compuesto por caracteres ASCII de 8 bits y a los datos de salida como cdigos binarios de cierta longitud (por ejemplo, 12 bits). As, la cadena de entrada XYZ123 de 48 bits puede que resulte codificada (comprimida) como el nmero binario 101001110011 de 12 bits. Si se encuentra una coincidencia, la ventana se desliza de L posiciones a la derecha. Estos L caracteres pasan a ser visibles dentro de la ventana y simultneamente otros L caracteres a la izquierda dejan de estar en la ventana. De esta forma se desechan los caracteres ms antiguos. Pero puede ocurrir que dentro de la ventana no haya ni un solo carcter que coincida con el prximo carcter de entrada C. En tal caso F = 0 y se enva F,C para indicar que ese carcter no existe en la ventana. A continuacin la ventana se desliza de una sola posicin. Como ilustracin de este proceso, supongamos una ventana deslizante de N = 20 caracteres y que en un dado momento dentro de ella se encuentre la cadena: INCENZO_MENDILLO_ APR que es parte de una secuencia ms larga:

Se observa que hay dos coincidencias para la cadena EN, pero hay una coincidencia an ms larga que corresponde a la cadena ENDI y es de 4 caracteres. Su posicin es 10 puestos contados desde la derecha. As que se combina F = 1, L = 4 y P = 10 para formar el cdigo de salida. A continuacin se desliza la ventana de 4 caracteres a la derecha para as incluir la nueva

cadena ENDI apenas codificada. En la ventana aparecer entonces la secuencia NZO_MENDILLO_APRENDI. El siguiente carcter no se encuentra en la ventana, as que se combina F = 0 y el carcter para formar el cdigo de salida. A continuacin se desliza la ventana de un carcter a la derecha para as incluir la nueva cadena apenas codificada. El

Pag. 1-19 proceso contina hasta codificar todo el mensaje.

Inicialmente se puede cargar la ventana con caracteres arbitrarios, por ejemplo espacios (que son los ms probables en un archivo de texto). Una buena seleccin de estos caracteres mejora la compresin de la parte inicial de los datos. Un aspecto muy importante es la seleccin del esquema para representar la posicin y la longitud de una cadena. Por lo que se refiere a la posicin P de la cadena, se usa un cdigo de longitud fija como se hace en LZ77, ya que cualquier posicin es (en principio) equiprobable. Por ejemplo, si se escoge una ventana de 256 posiciones, entonces bastan 8 bits para representar cualquiera de esas posiciones. En cambio para representar la longitud L de la cadena, al contrario de LZ77, es ms conveniente usar un cdigo de longitud variable, donde los cdigos ms cortos correspondan a cadenas cortas (que por lo general son ms probables que cadenas largas). Una manera muy sencilla de hacer esto consiste en usar el menor nmero posible de bits para representar L en forma binaria, eliminando los ceros que anteceden el nmero. Por ejemplo, 5 se representa en forma corta como 101 y no como 00000101 y 2 se representa como 10 (y no como 00000010). Pero as se viola la condicin del prefijo, ya que en la decodificacin del flujo de cdigos no se podra saber si ..101.. corresponde a 5 o es ..10..1.., es decir 2 seguido de 1. Para evitar esto, se aade al inicio un nmero de ceros igual a la longitud binaria corta. As 5 se codifica como 000101, 4 como 000100, 3 como 0011, 2 como 0010 y 1 como 01. Al reflexionar un poco, uno se da cuenta que se puede ganar an ms si se quita un cero, esto es si 5 se codifica como 00101, 4 como 00100, 3 como 011, 2 como 010 y 1 como 1. Aplicando este esquema a la cadena ENDI del ejemplo anterior, el cdigo correspondiente a F = 1, L = 4 y P = 10 ser 1 00100 00001010 (asumiendo una ventana de 256 posiciones), con una longitud total de 14 bits. Si no se usara compresin, se requeriran 32 bits (4 bytes) y si se usara LZ77 se requeriran 3 bytes, esto es 24 bits. El prximo carcter de entrada no se encuentra en la ventana, as que se codifica en binario digamos como 11010011, es decir la bandera (F = 0) seguida por el valor numrico del carcter . En este caso el cdigo resultante es de 9 bits, mientras que el carcter tiene 8 bits, por lo que hay una ligera expansin, en todo caso mucho menor que en LZ77, que requerira 24 bits. La descompresin (o decodificacin) es el proceso inverso al anterior: Si la bandera F es 1, indica que el cdigo corresponde a una cadena conocida, as que se determina con ese mismo cdigo su longitud L y su posicin P en la ventana. A continuacin se copian a la salida L caracteres, contados a partir de P. Luego se desliza la ventana de L posiciones, para as pasar a decodificar el siguiente cdigo. Si la bandera F es 0, se extrae a la salida el carcter ASCII que sigue a la bandera. Al igual que LZ77, la descompresin requiere mucho menos trabajo y en consecuencia es mucho ms rpida que la compresin, ya que no hay que buscar coincidencias.

Debido a la naturaleza orientada a bits de los datos comprimidos, no es trivial determinar cuando se ha llegado al final de un bloque de datos. Una solucin consiste en utilizar un cdigo especial que signifique fin de datos. Otra forma es insertar al principio de los datos comprimidos la longitud del bloque. Si bien este algoritmo es bastante bueno, se le pueden hacer muchas mejoras. Por ejemplo, la compresin es muy pobre al empezar el proceso ya que la ventana est vaca. Se puede entonces precargar la ventana con caracteres especiales. El problema es decidir con qu caracteres, ya que por lo general no se sabe a priori qu tipo de datos se van a comprimir. Probablemente lo ms fcil sea insertar cadenas que contengan las ocurrencias consecutivas de todos los smbolos ASCII. Se puede experimentar con los bits utilizados para representar la posicin y la longitud. Uno podra pensar que se va a lograr una mejor compresin si se utilizan ms bits, pero hay al menos 2 efectos negativos. En primer lugar se requiere ms tiempo para explorar la ventana y en segundo lugar puede perjudicarse la propia razn de compresin, sobre todo para bloques pequeos. Por ejemplo, si en vez de usar una ventana de 4 KB (12 bits) y una longitud de 16 caracteres (4 bits), se usa una ventana de 64 KB (16 bits) y una longitud de 1024 caracteres (10 bits), se requieren 1+16+10 = 27 bits en vez de 1+12+4 = 17 bits para codificar una cadena. Por otro lado las cadenas de 2 caracteres o menos no sera conveniente codificarlas como tales. Una cadena de 2 caracteres consumira 27 bits, mientras que 2 caracteres individuales consumiran 18 bits (se requiere un bit adicional para indicar que lo que sigue es un carcter normal). Estos efectos en la prctica anulan cualquier ventaja que se pudiera lograr con el aumento de dichos valores. Una manera efectiva de aumentar la velocidad de compresin es agrupando los bits de la bandera, en vez de enviarlos inmediatamente a la salida. En otras palabras, se pueden acumular esos bits en un buffer hasta que sean 8 o 16. Se envan entonces a la salida, seguidos por el resto del cdigo. Si se utilizan 12 bits para la posicin y 4 para la longitud, el resto del cdigo es 16 bits (2 bytes). Si no se consigui pareja, el resto del cdigo es un carcter de 8 bits. El objetivo de todo esto es trabajar con bytes y no con bits, ya que as el algoritmo corre ms rpido. El mayor problema en LZM (as como en LZ77) lo representa el retardo asociado a la exploracin de la ventana durante la compresin. En efecto, en la compresin debe realizarse una comparacin de cadenas para cada posicin en la ventana, lo cual lleva cierto tiempo. Si se intenta mejorar la compresin aumentando el tamao de la ventana (y as el tamao del diccionario), el retardo se hace mayor, ya que el tiempo requerido para encontrar la pareja ms larga en la ventana es proporcional al producto del tamao de la ventana por la longitud de la cadena. La descompresin no tiene este problema, ya que slo copia cadenas, y as opera en tiempos mucho ms cortos. Ms an, el

tiempo de descompresin no es afectado significativamente por el tamao de la ventana o del buffer. La tarea de bsqueda es una de las operaciones ms frecuentes en los algoritmos computacionales. Existen diversas variaciones bsicas del tema de la bsqueda y se han creado muchos algoritmos tratando de optimizar el proceso. Cuando no se dispone de mayor informacin acerca del elemento buscado, el procedimiento obvio consiste en explorar secuencialmente los datos hasta conseguir el elemento o hasta llegar al final de los datos. Se trata entonces de una bsqueda lineal y se puede llevar a cabo con el siguiente algoritmo en Pascal: i:=0; while (i<n) and A[i]<>X do i := i+1; Aqu se asume que los datos forman un arreglo A[i] de n elemento y que X es el elemento buscado. Ntese que cada paso requiere la evaluacin de una expresin booleana de 2 factores e incrementar el ndice i. Podra simplificarse esta tarea y en consecuencia acelerarse la bsqueda? La nica posibilidad consiste en simplificar la expresin booleana reducindola a un solo factor. Esto es logra colocando un elemento adicional igual a X al final de los datos. A este elemento adicional es un centinela que impide que se exceda el lmite. El algoritmo de bsqueda es ahora: i := 0; A[n] := X; while A[i]<>X do i := i+1; Evidentemente i = n implica que no se encontr el elemento (excepto el propio centinela). El tipo de bsqueda que se hace en LZM es la bsqueda de cadena, donde una cadena (string) es una secuencia de elementos. Se caracteriza de la siguiente manera: dado un arreglo A de n elementos y un arreglo o patrn P de m elementos (donde m <= n), la tarea consiste en hallar la primera presencia de P en A. Si los elementos son caracteres, entonces A puede considerarse como un texto y P como un patrn de bsqueda de la palabra o frase en el texto.

Pag. 1-20 Un procedimiento simple de bsqueda directa consiste en explorar secuencialmente el texto buscando una coincidencia (match), es decir un carcter que coincida con el primer carcter del patrn. Si se consigue, entonces se comparan sucesivamente los caracteres que siguen hasta conseguir una discrepancia o hasta llegar al final del patrn. En este ltimo caso la bsqueda fue exitosa y en caso contrario hay que continuar la bsqueda. El siguiente ejemplo ilustra el procedimiento: Texto: Patrn: dbababcfghijk abc abc abc abc abc

El patrn abc se alinea con el inicio del texto y se comparan uno a uno los caracteres del patrn con los del texto. En lo que se consigue una discrepancia el patrn se corre de una posicin y se repite el proceso. El rendimiento de este algoritmo en el peor de los casos es muy pobre. Por ejemplo, si el patrn no existe en el texto, se efectan un total (n-m+1)m comparaciones (aproximadamente nm comparaciones si el texto es muy largo en comparacin con el patrn). Despus de una coincidencia parcial, se puede incrementar el tamao del corrimiento para que sea mayor de 1, precompilando algunos datos del patrn para as lograr un avance ms rpido en el texto. Para el ao de 1970, Knuth et al. desarrollaron un ingenioso algoritmo que requiere esencialmente slo n comparaciones, aun en el peor de los casos. Posteriormente en 1975, Boyer y Moore desarrollaron un algoritmo que mejora el rendimiento no slo en el peor de los casos, sino tambin en el caso promedio. Este algoritmo se basa en la idea no convencional de empezar a comparar los caracteres al final del patrn en vez de al inicio. Para mayor informacin, consltese [24]. El programa ARCHLZM fueescrito por el Prof. Vincenzo Mendillo para utilizar la tcnica de compresin LZM en software educativo.

1.8. Compresin LZ78 y LZW


LZ77 posee una deficiencia que debe haber preocupado a sus creadores, Jacob Ziv y Abraham Lempel, y quizs por eso propusieron un segundo mtodo, tambin basado en diccionario. Como se recordar, LZ77 descarta las cadenas ms antiguas en el flujo de datos y slo toma en cuenta las ms recientes, lo cual significa que explota la redundancia ms reciente en los datos. En muchos casos esto puede ser conveniente y se logra una alta compresin, ya que ciertas secuencias tienden a repetirse inmediatamente. La compresin de la gua telefnica es un buen ejemplo, ya que despus de encontrar por primera vez el apellido Prez, seguir apareciendo repetidamente, mientras que el apellido Alvarez apareci mucho antes y probablemente no va a aparecer ms. A medida que se avanza en la gua telefnica, los efectos ms recientes se manifiestan y LZ77 los puede aprovechar. Pero algunos datos son inmunes a este efecto, por ejemplo la direccin y el nmero de telfono de un abonado no tiene ninguna relacin con el abonado precedente. En 1978 Ziv y Lempel describieron y discutieron su segundo mtodo de compresin en el artculo "Compression of individual sequences via variable-rate coding" de la revista IEEE Transactions on Information Theory de septiembre 1978 y por tal razn posteriormente se le denomin compresin LZ78 [25]. Histricamente, LZ78 fue el primero de los algoritmos LZ en hacerse popular, debido a su adaptacin por parte de Terry Welch en el algoritmo LZW y su posterior inclusin en el programa COMPRESS utilizado bajo el sistema operativo Unix.

Si bien LZ77 y LZ78 parecen muy semejantes, en realidad se diferencian apreciablemente y cada uno tiene ventajas y desventajas. LZ78 utiliza un enfoque distinto a LZ77 para construir y mantener el diccionario, abandonando el concepto de una ventana abierta sobre los smbolos previos, tal como se hace en LZ77. En vez de utilizar una ventana de tamao limitado que se desliza sobre los smbolos de entrada ya procesados, LZ78 construye su diccionario a partir de todos los smbolos de entrada ya procesados. El diccionario de cadenas o frases se construye aadiendo un solo smbolo a la vez a las cadenas ya existentes. Este procedimiento incremental trabaja muy bien aislando identificando cadenas usadas frecuentemente y aadindolas al diccionario. A diferencia de LZ77, las cadenas en LZ78 pueden ser muy largas, lo cual permite lograr en ciertos casos una compresin impresionante. LZ78 es similar a LZ77 en algunos aspectos. LZ77 produce y enva a la salida una serie de cdigos, y cada cdigo posee 3 componentes: la posicin de la cadena, la longitud de la cadena y el carcter que sigue a dicha cadena. LZ78 tambin produce una serie de cdigos con esencialmente el mismo significado. Cada cdigo contiene 2 componentes: la posicin de la cadena en el diccionario y el carcter que le sigue. Pero a diferencia de LZ77, la longitud no se codifica, ya que el descompresor la puede determinar por su cuenta. A diferencia de LZ77, LZ78 no dispone de una ventana llena de smbolos o caracteres a ser usada como diccionario, sino que ms bien crea nuevas cadenas cada vez que emite un cdigo y aade esa cadena al diccionario. Despus de aadir la cadena, ella va estar disponible para el codificador en cualquier momento posterior y no solamente durante un cierto tiempo, como ocurre en LZ77. Con LZ78 tanto el codificador como el decodificador empiezan con un diccionario virtualmente vaco. Por definicin, el diccionario posee al inicio una sola cadena codificada: la cadena nula. A medida que se lee cada smbolo o carcter de entrada, se agrega a la cadena actual. El proceso contina en la medida en que la cadena actual de entrada ya exista en el diccionario. Pero finalmente se llega a un momento en el cual ya no se consigue una cadena correspondiente en el diccionario. Es entonces cuando LZ78 emite el cdigo en forma de prefijo + extensin. El prefijo es un ndice o puntero a la cadena precedente (que s existe en el diccionario) y la extensin es el smbolo o carcter con el cual se forma una cadena que no an existe en el diccionario. A este punto LZ78 efecta un paso adicional: la nueva cadena (que consiste de la cadena anterior ms la extensin), se agrega al diccionario para que la prxima vez que aparezca esta nueva cadena, ella se pueda utilizar para construir una cadena todava ms larga. A continuacin se muestra un ejemplo de cmo funciona el codificador, utilizando como entrada la siguiente secuencia de caracteres: BCBCACBCBCABCABCABACABCBCAAAAAAAAAAA BACBACBBAAAAAB El codificador empieza sin tener frases o cadenas en el diccionario y el ndice 0 se usa para definir la cadena vaca. El primer carcter que se lee (esto es B) corresponde a una cadena que todava no existe en el diccionario. As que la cadena B se aade en el diccionario en la posicin 1 y se emite a la salida el

Pag. 1-21 cdigo formado por prefijo + extensin, en esto caso 0B. El siguiente carcter C tampoco existe en el diccionario y se aade en la posicin 2, emitiendo el cdigo 0C. Cuando se llega al tercer carcter, es decir B, ste ya existe en el diccionario y en consecuencia se avanza al cuarto (es decir C), se forma la cadena BC, que todava no existe en el diccionario, por lo que se le aade y se emite el cdigo 1C, ya que 1 corresponde al ndice en el diccionario donde est guardado el carcter B. A medida que avanza el proceso, se aaden al diccionario cadenas cada vez ms largas, tal como se muestra en la Tabla 7.

Posicin 0 1 2 3 4 5 6 7 8 9

Contenido

B C BC A CB CBC AB CA BCA

Cdigo de Salida nulo 0B 0C 1C 0A 2B 5C 4B 2A 3A

Tabla 7. Codificacin LZ78

Ntese que si se almacenan las propias cadenas en el diccionario, se gasta un espacio precioso, especialmente para las cadenas largas. Es mucho ms eficiente guardar el cdigo de salida, partir de cual es posible reconstruir la cadena en forma incremental, saltando de posicin en posicin y extrayendo la extensin. Por ejemplo, si en la posicin 9 se guarda 3A, se puede saber que corresponde a BCA ya que el prefijo 3 nos enva a la posicin 3 donde est la extensin C y el prefijo 1, el cual nos enva a la posicin 1 donde est la extensin A. Por su lado el descompresor puede recrear un diccionario idntico a partir de los cdigos recibidos, por lo que el mtodo es muy conveniente ya que no se necesita pasar el diccionario al descompresor. Como se ve, LZ78 es conceptualmente muy sencillo, pero su realizacin en forma de algoritmo computacional es algo compleja, sobre todo por la gestin del diccionario. Por ejemplo, si se usa un ndice de 16 bits para la posicin, se pueden guardar 65535 cadenas, las cuales pueden llegar a ser muy largas y se puede tardar mucho tiempo para ver si existen en el diccionario. Para agilizar la bsqueda, el diccionario se puede organizar en forma de rbol binario. Un aspecto negativo de LZ78 que no existe en LZ77 es que el descompresor tambin debe manejar un rbol semejante. En efecto, con LZ77 el ndice era simplemente un puntero a una posicin previa en el flujo de datos, pero con LZ78 el ndice es el nmero de un nodo en el rbol, de manera que el descompresor debe reconstruir un rbol exactamente igual al del compresor, de lo contrario habra errores. Otro detalle importante es que por ms que el diccionario sea grande, puede llegar a llenarse. Por ejemplo, si se usa un

ndice de 12 bits, el diccionario se llena despus que se han definido y guardado 4095 cadenas. Hay varias maneras de atacar este problema. Una de ellas es simplemente dejar de aadir nuevas cadenas cuando el diccionario se llena, lo cual sin embargo podra perjudicar la compresin de archivos muy grandes, por ejemplo, tipo EXE, donde usualmente ocurre un cambio significativo en la caracterstica de los datos a medida que se pasa de la seccin de cdigo a la seccin de datos. Otra forma de resolver este problema es monitoreando la razn de compresin: Si ella empieza a degradar, el diccionario se borra completamente y se empieza a construir uno nuevo. La publicacin de LZ78 en el ao 1978 en el artculo de Ziv y Lempel antes mencionado tuvo un impacto inmediato en el mundo de la Teora de la Informacin, pero pasaron varios aos antes de que realmente se notaran sus efectos en la prctica, ya que el mtodo de compresin fue planteado bajo una forma muy conceptual y abstracta. De hecho, hubo que esperar la publicacin de otro trabajo en 1984 para que las cosas se movieran de verdad. La edicin de junio de 1984 de IEEE Computer contena un artculo titulado "A technique for high-performance data compression", escrito por Terry Welch [26]. Este trabajo era una descripcin de un algoritmo (llamado LZW, por Lempel-Ziv-Welch) para miplementar LZ88 en forma prctica. Inmediatamente despus de la aparicin de este artculo, se aplic el algoritmo LZW al programa COMPRESS, el cual fue escrito en lenguaje C para trabajar en ambiente Unix. COMPRESS fue un producto de mucha influencia por una serie de razones: Estaba bien escrito, funcionaba correctamente y estaba bien documentado. El cdigo fuente se puso en el dominio pblico desde el principio, lo cual facilit su distribucin y estudio. As, muchas instalaciones Unix empezaron a usarlo activamente. Quizs todava ms importante, el programa se escribi de forma de que pudiera ser compilado y funcionar con otros sistemas operativos casi sin modificaciones. Una mejora sorprendente que LZW logra con respecto a LZ78 es la eliminacin del requisito de que cada cdigo de salida se componga de prefijo + extensin. De hecho, el cdigo slo se compone del prefijo, lo cual significa un gran ahorro. Por ejemplo, si se usa un prefijo de 12 bits (para apuntar a un diccionario de 4096 posiciones) y una extensin de 8 bits (para usar smbolos ASCII), los cdigos de salida van a ser de slo 12 bits en vez 20. Para que esto funcione, la cadena nueva se incia con la extensin de la cadena anterior, para que as el descompresor, al recibir un cdigo, pueda determinar la extensin de la cadena previa y aadir esa cadena a su diccionario. Un ejemplo ms adelante permitir entender mejor este punto. Otra mejora de LZW es que precarga el diccionario con cadenas compuestas por todos los distintos smbolos del alfabeto, por ejemplo si se usan los smbolos ASCII, habr inicialmente 256 cadenas, donde cada una corresponde a un smbolo ASCII. De esta manera no va a haber smbolos que no puedan ser decodificados inmediatamente, aun cuando todava no hayan aparecido en el flujo de entrada. La tarea bsica del compresor consiste en construir en forma rpida y eficientemente el diccionario, el cual es bsicamente una tabla que contiene las cadenas que han sido

Pag. 1-22 encontradas a medida que el bloque de entrada es explorado secuencialmente. Al igual que en LZ78, cuando se encuentra una cadena que no existe, entonces se aade a la tabla. Esto ocurre cuando al explorar los smbolos de entrada, se llega a un punto en que el nuevo smbolo (la extensin) que se aade a la cadena forma una cadena que no existe en el diccionario. LZW conserva la propiedad de adaptabilidad de LZ78 y posee una lgica muy simple, que lo hace muy rpido en ejecucin. Es adaptable en el sentido de que se empieza por un diccionario vaco y ste se va llenando de cadenas durante el proceso, tanto en la compresin como en la descompresin. La compresin se hace en una sola pasada y no requiere informacin previa sobre la estadstica de los datos a comprimir. Esta caracterstica produce una pobre compresin de los primeros datos. En consecuencia, debe haber suficientes datos para que el diccionario se vaya llenando de cadenas que volvern aparecer en flujo de datos subsiguiente y as lograr al final una buena compresin. Pero por otro lado, si el tamao del diccionario es pequeo o hay muchos datos a comprimir, el diccionario se llena y el compresor pierde su posibilidad de adaptarse a la naturaleza de los datos. Tambin se produce una pobre compresin si la estadstica de los datos cambia apreciablemente (por ejemplo, de texto se pasa a grfico). Podra pensarse en mejorar LZW aumentado el tamao del diccionario, ya que as se podran almacenar cadenas ms largas. Desafortunadamente el utilizar un cdigo ms largo perjudica la compresin cuando se trata de bloques pequeos. Esto se debe a que un bloque de entrada pequeo requiere de un diccionario corto, el cual se podra codificar con 9 o 10 bits en vez de 12 o ms, produciendo as una salida ms compacta. Existe una solucin simple a este problema, y consiste en utilizar cdigos de longitud variable, esto es, empezar utilizando un cdigo de 9 bits y pasar a 10 bits cuando se han aadido 256 cadenas al diccionario (incluyendo los 256 valores iniciales). Luego pasar sucesivamente a 10, 11, 12 etc., hasta llegar a 15 o 16. Para una tabla de 4096 posiciones esto significa una mejora de ms del 6%, pero aumenta la complejidad del algoritmo tanto en el compresor como en el descompresor, por lo cual el proceso se vuelve algo ms lento. Otra mejora es utilizar un cdigo especial de reinicio (reset). Este cdigo le indica al descompresor que debe borrar el diccionario (flush) y empezar con uno nuevo. Si el algoritmo monitorea la razn de compresin y nota que empieza a deteriorarse, entonces enva el cdigo de reinicio [27]. A continuacin vamos a explicar con algo ms de detalles la compresin LZW. En forma de pseudo cdigo, el algoritmo de compresin es bsicamente el siguiente:
Inicializar el diccionario con todos los caracteres del alfabeto Leer el primer carcter -> prefijo w Lazo: Leer el siguiente carcter K Si no hay ms caracteres: cdigo(w)-> salida Fin Si wK existe en el diccionario: wK -> w Ir a Lazo Si wK no existe en el diccionario: Aadir wK al diccionario

Pag. 1-23
cdigo(w) -> salida K -> w Ir a Lazo

a los caracteres de entrada: BCBCACBCBCABCABCABACABC. Una caracterstica de LZW, al igual que LZ78, es que el descompresor es capaz de reconstruir un diccionario exactamente igual a partir del flujo de cdigos que recibe, lo cual le permite decodificar, es decir descomprimir los datos recibidos. Cada cdigo de entrada en el descompresor corresponde a una direccin en su diccionario en la cual est guardada la extensin (que se extrae y se aade a la secuencia en formacin). Tambin all se encuentra el cdigo del prefijo, con el cual se va a una nueva direccin donde tambin se extrae la extensin junto con el cdigo del prefijo y as sucesivamente. La operacin es recursiva hasta que el prefijo corresponde a un solo carcter, con lo que se termina la decodificacin de ese cdigo de entrada. Ese ltimo carcter se aade al cdigo previo, creando as una nueva cadena que se agrega en la siguiente posicin libre del diccionario. Ntese que ese ltimo carcter que se extrae en el descompresor es el primero que proces el compresor, ya que los caracteres se van extrayendo en orden inverso, por lo que en el descompresor hace falta una memoria de almacenamiento intermedio tipo pila (stack) para luego reconstruir la cadena en el orden correcto. Para cada cdigo recibido (a excepcin del primero), se efecta una actualizacin del diccionario. De esta forma el descompresor reconstruye incrementalmente la misma tabla del compresor, pero con un retraso de un paso con respecto al compresor. El procedimiento se ilustra en la Tabla 9.

En una dada iteracin de este algoritmo, se tiene definida una cadena w de caracteres. A continuacin se lee el siguiente carcter K y se empieza una bsqueda para ver si la nueva cadena wK existe en el diccionario. Si el resultado es positivo, w es reemplazado por wK y se repite el proceso. Si es negativo, se aade wK al diccionario, se enva a la salida el cdigo de w (es decir el cdigo del prefijo de wK) y K se toma como el inicio de la prxima cadena w. Ntese que para cada cadena wK ya existente en el diccionario, su prefijo w tambin se encuentra en ese diccionario. En la Tabla 8 se muestra un ejemplo de este procedimiento.

| ------- Tabla (diccionario) ---------| Carcter de entrada Cadena a codificar Direccin Prefijo (y Extensin cdigo de salida)

65 (= A) 66 (= B) 67 (= C) B C B C A C B C B C A B C A B C A B A C A B C B BC CB BC BCA AC CB CBC CB CBC CBCA AB BC BCA BCAB BC BCA BCAB BCABA AC ACA AB ABC 256 257 258 259 260 66 67 256 65 257 C B A C C

| ------- Tabla (diccionario) --------| Cdigo de entrada Direccin Prefijo (cdigo previo) Extensin Secuencia de salida

261 262

260 65

A B 66 67 256 65 257 260 65 258 263 259 262

65 (= A) 66 (= B) 67 (= C) 256 257 258 259 260 261 262 263 264 265 66 67 256 65 257 260 65 258 263 259 C B A C C A B B A A B C BC A CB CBC A BCA BCAB AC AB

263

258

264 265 266

263 259 262

A A C

Tabla 8. Codificacin Lempel-Ziv-Welch (LZW)

Tabla 9. Decodificacin Lempel-Ziv-Welch (LZW) El alfabeto corresponde a los 256 caracteres ASCII (pero por simplicidad slo se muestran 3 de las 256 direcciones o posiciones iniciales). La secuencia que se codifica corresponde

Supongamos que el compresor ha justo terminado de procesar la cadena ABC y que ha enviado el cdigo 262 de

Pag. 1-24 prefijo a la salida. Su nivel de direccin actual ocupada es entonces 266. El descompresor trabaja atrasado de un paso con respecto al compresor y su nivel de direccin actual es 265. Al recibir el cdigo 262, va a la direccin 262 y extrae la extensin B y el prefijo 65, que corresponde a A. As termina formando en el stack la cadena BA, que al invertirla, extrayndola del stack, corresponde a AB. Luego se ocupa de llenar su direccin 265, donde coloca el cdigo antiguo que haba procesado previamente (259), como prefijo, y el carcter A, como extensin. El decodificador sabe que la extensin es A y ella debe ser la primera letra de la cadena AB que acaba de reconstruir ABC. El pseudo cdigo para el algoritmo de descompresin es bsicamente el siguiente:
Inicializar el diccionario con todos caracteres del alfabeto Leer el primer cdigo -> CODIGO Decodificar CODIGO -> salida CODIGO -> CODIGO_PREVIO Lazo1: Leer el siguiente cdigo -> CODIGO Si no hay ms caracteres: Fin Lazo2: Si CODIGO=cdigo(wK): K -> stack cdigo(w) -> CODIGO Ir a Lazo2 Si CODIGO=cdigo(K): K -> salida Vaciar el stack a la salida (en orden inverso) Aadir al diccionario el CODIGO_PREVIO y K CODIGO -> CODIGO_PREVIO Ir a Lazo1 los Lazo1: Leer el siguiente cdigo -> CODIGO Si no hay ms caracteres: Fin Si CODIGO no definido (caso especial):

Aadir al diccionario el CODIGO_PREVIO y la misma extensin K de la direccin-1


Lazo2: Si CODIGO=cdigo(wK): K -> stack cdigo(w) -> CODIGO Ir a Lazo2 Si CODIGO=cdigo(K): K -> salida Vaciar el stack a la salida (en orden inverso) Aadir al diccionario el CODIGO_PREVIO y K CODIGO -> CODIGO_PREVIO Ir a Lazo1

Este algoritmo posee un pequeo inconveniente y es que no funciona correctamente cuando se repiten ciertas cadenas de entrada, de la forma KwKwK, donde Kw ya existe en el diccionario. En el ejemplo de la tabla anterior, los caracteres de entrada CBCBC (a partir del sptimo) forman el patrn KwKwK, lo que produce que el cdigo 257 (correspondiente a Kw) sea seguido inmediatamente por el cdigo 260 (correspondiente a KwK). Cuando el descompresor recibe el cdigo 260, no sabe como decodificarlo, ya que el se encuentra precisamente en la direccin 260 y todava no ha aadido ese cdigo a su tabla, en vista de que trabaja atrasado. Ntese sin embargo que en este caso particular, la extensin que va en la tabla en la posicin 260, es la misma que la extensin en la posicin precedente (259). Igual situacin se presenta con el cdigo de entrada 263. De manera que el algoritmo bsico se debe modificar para que cuando al descompresor llega un cdigo indefinido, igual al valor de la direccin actualmente desocupada, se pueda decodificarlo correctamente. El algoritmo de descompresin modificado es entonces el siguiente:
Inicializar el diccionario con todos los caracteres del alfabeto Leer el primer cdigo -> CODIGO Decodificar CODIGO -> salida CODIGO -> CODIGO_PREVIO

El proceso ms crtico y que determina la rapidez en LZW se presenta en el compresor, cuando se debe buscar en el diccionario si ya existe la cadena de entrada. Esta bsqueda se puede hacer excesivamente lenta si se utiliza un mtodo poco eficiente. Supongamos que en el ejemplo anterior la prxima cadena a comprimir, despus de ABC, sea CBA y que se utiliza una bsqueda lineal desde el principio (direccin 256). Entonces exploramos la siguiente direccin donde encontramos CB; de all seguimos hasta la ltima direccin ocupada (direccin 266) para descubrir as que CBA no existe y entonces aadimos en la direccin 267 el prefijo 257 y la extensin A. Es fcil darse cuenta que este proceso se hace cada vez ms lento a medida que la tabla se va llenando, ya que el tope est cada vez ms lejos. La bsqueda lineal no es efectiva y en la prctica se debe recurrir a otros mtodos, tal como el llamado hashing (desmenuzamiento) que es muy utilizado en los compiladores para crear y tener acceso a su tabla de smbolos. Con el hashing la tabla no se va llenando secuencialmente, sino en forma pseudoaleatoria, para lo cual se usa una funcin hash H(C) apropiada que convierte un cdigo C de N bits en otro c = H(C) de M bits, siendo M menor que N. Supongamos en el mismo ejemplo, que estamos usando cdigos hexadecimales de 12 bits y que ya hemos conseguido la direccin de CB, la cual es, por ejemplo, 74F hex (12 bits). El prximo carcter de entrada es A (ASCII 41 hex, 8 bits). Entonces para ver si existe en la tabla, formamos el cdigo compuesto C = 74F41 hex de 20 bits, lo elevamos al cuadrado, obteniendo un nmero de 40 bits, de los cuales extraemos los 12 bits centrales, que digamos corresponden al cdigo c = 3D8 hex. Vamos entonces a la direccin 3D8 en la tabla y vemos si all se encuentra el prefijo 74F y la extensin A. Si el resultado es positivo, la secuencia ya existe en la tabla e iteramos el procedimiento con el prximo carcter de entrada. Si en cambio esa direccin est vaca, entonces se llena con el prefijo 74F y la extensin A. La funcin hash que hemos utilizado y que consiste en elevar al cuadrado y tomar los 12 bits centrales, es una de las tantas posibles funciones, pero es muy importante escogerla apropiadamente para reducir la probabilidad de colisiones, es decir que al ir a una direccin, ella est ya ocupada por otro cdigo. Por ejemplo, el nmero C' = 9F6E5, correspondiente hipotticamente a la secuencia BCAB, podra tener como imagen en la tabla el mismo c = 3D8 que el cdigo C = 74F41.

Lo ideal entonces es una funcin hash que distribuya los cdigos uniformemente sobre la tabla, pero an as no se evitan completamente las colisiones, que sern ms frecuentes cuando ms llena est la tabla. Existen varias soluciones para las colisiones: Una forma consiste en buscar sucesivamente en direcciones separadas por un desplazamiento d hasta encontrar una direccin libre (o felizmente el cdigo buscado). Si se usa como tabla un buffer circular y un nmero d relativamente primo al tamao M de la tabla, se puede estar seguro que todas las direcciones de la tabla van a ser exploradas, en caso contrario habr regiones no exploradas. Dos nmeros son relativamente primos si no tienen factores en comn (excepto el 1). Vamos a ilustrarlo con 2 nmeros pequeos que cumplen con esa condicin: d = 3 y M = 7. Si calculamos 3k mod 7 con todos los valores de k desde 0 hasta 6, se generan los nmeros 0, 3, 6, 2, 5, 1, 4 (que seran direcciones en la tabla). Esta secuencia se repite a partir de k = 7. Ntese que la secuencia es una permutacin de la secuencia natural 0, 1, 2,6, es decir que contiene todos los nmeros hasta M-1. Si en cambio se usa d = 2 y M = 6, donde 2 y 6 no son relativamente primos, se genera la secuencia 0, 2, 4, 0, 2, 4. En este caso faltan algunos nmeros, es decir que no se logra explorar todas las direcciones de la tabla. La forma ms fcil de asegurar que d y M sean relativamente primos, es que d sea un nmero primo. Por ejemplo 101 es primo y en

Pag. 1-25 consecuencia es relativamente primo con 4096 (tabla de 12 bits), ya que no comparten ningn factor comn. Hay otro mtodo de bsqueda muy rpido y se basa en crear la tabla con una estructura tipo rbol genealgico, con lo cual se logra que la bsqueda siga una ruta prefijada, en vez de tener que chequear una por una todas las palabras ya existentes en el diccionario. El principio es anlogo a la bsqueda del nmero de una persona en la gua telefnica: Se busca por la primera letra, luego por la segunda, hasta agotar la ltima letra de su nombre. A cada persona (si existe) corresponde un nmero telefnico (cdigo) y viceversa. En la estructura tipo rbol, las ramas conectan los caracteres del alfabeto (nodos principales o races) con otros nodos (hojas o hijos) que corresponden a las cadenas existentes en el diccionario. Durante el proceso de compresin se pasa de nodo-padre a nodo-hijo, para ver si entre todos los hijos existe la cadena buscada. Esto significa que en cada nodo habra que guardar la direccin de todos sus hijos, lo cual obviamente no es conveniente. Lo que se puede hacer en cambio es guardar la direccin del hijo primognito y del hermano que le sigue en orden cronolgico. Este concepto se ilustra en el diagrama de la figura 8, que corresponde a la siguiente secuencia de cadenas de entrada: AC, AB, ACA, AA, ABC, AAA, AAAA, ABA.

A raz AC nodo 256 ACA nodo 258 AB nodo 257 ABC nodo 260 ABA nodo 263 AA nodo 259 AAA nodo 261 AAAA nodo 262 Fig. 8. Esquema de compresin/descompresin basado en rbol con nodos

El nodo 256 (AB), por ejemplo, tiene como hijo primognito al nodo 260 (ABC) y como hermano menor al nodo 259 (AA). De manera que en la posicin 257 se almacenan los apuntadores 260 y 259, as como el cdigo ASCII de la letra B, que es la extensin de AB. En un caso prctico que se utilice un diccionario de 4096 palabras, en cada nodo hay que almacenar 2 apuntadores de 12 bits cada uno y la extensin de 8 bits, por lo que se requiere una memoria RAM de 77824 bytes. En el descompresor, en cambio, no se requiere apuntar al hijo y al hermano, sino al padre (lneas punteadas en la figura): Al recibir un cdigo se va directamente a la direccin en el diccionario y all se encuentra la extensin que se extrae y se aade a la cadena en formacin. Luego con el cdigo del padre se va a esa nueva direccin donde tambin se extrae la extensin y as sucesivamente. A continuacin se va a explicar el proceso de compresin y

descompresin usando esta estructura de rbol para la siguiente secuencia de 50 caracteres: 15 BCBCACBCBCABCABCABACABCBCAAAAAAAAAAABACBAC BBAAAAAB

Aqu el compresor ya ha procesado 14 caracteres y se han creado 262 nodos. La siguiente cadena BCA en la posicin 15 se encuentra en el rbol en el nodo 258, pero no as BCAB, as que se suspende el proceso y se enva a la salida el cdigo 258 del prefijo BCA y en el siguiente nodo libre en la tabla (263) se anota la extensin B. Tambin se anota en el nodo 258 quin es su nuevo hijo (263). El proceso se ilustra en la Tabla 10.

Pag. 1-26

contenido de la tabla Nodo (raz) 65 66 67 Carcter A B C Cdigo 65 66 67 hijo 259 256 257 contenido de la tabla Nodo 256 257 258 259 260 261 262 263 prefijo B C BC A CB CBC A BCA entrada Cdigo 66 67 256 65 257 260 65 258 extensin C B A C C A B B salida hijo 258 260 263 0 261 0 0 0 hermano 0 0 0 262 0 0 0 0

Tabla 10. Proceso de compresin LZW

Por su parte el descompresor (que trabaja atrasado de 1 ciclo) al recibir el cdigo 258, va al nodo 258 donde extrae la extensin A que la guarda en el stack. Tambin consigue all el padre de 258, que es 256. Entonces va al nodo 256 y extrae la extensin C que la aade al stack. Tambin consigue all el padre de 256 que es 66, el cual es un nodo raz y corresponde al carcter B, que tambin se aade al stack. El contenido del stack es entonces ACB que al vaciarlo en forma invertida produce la secuencia de salida BCA. Tambin aade en el siguiente nodo libre de la tabla la extensin B (que es el ltimo carcter extrado y el padre de ese nodo (65). El nodo libre del descompresor es 262 y no 263, ya que el descompresor trabaja atrasado de 1 nivel con respecto al

compresor. El proceso se ilustra en la Tabla 11, donde los nmeros encerrados en los cuadritos indican los pasos en orden. Como ya se mencion, se presenta un problema cuando el descompresor recibe un cdigo que todava no existe en la tabla. Por ejemplo, cuando el compresor ha procesado la secuencia BCABA y enva a la salida el cdigo 263, que es precisamente el nivel libre en el descompresor. En la Tabla 12 se indica cmo se maneja esta situacin. El resultado final luego que se han procesado los 50 caracteres de entrada se muestra en la figura 9 (compresor) y en la figura 10 (descompresor).

raz 65 66 67

9 8

Carcter A B C contenido de la tabla

nodo 256 257 258 259 260 5


3

extensin
6

padre
7

C B A C C

66 67 256 65 257

sec. de salida BC CB BCA AC CBC

10

Pag. 1-27 261 262 A B


2

260 65
1

CBCA AB

Cdigos de entrada: 66, 67, 256, 65, 257, 260, 65, 258 Tabla 11. Proceso de descompresin LZW

Raz 65 66 67

11

Carcter A 12 B C contenido de la tabla

nodo 256 257 258 259 260 261 262 263


9

Extensin
8 6

padre
10

5
3

C B A C C A B B

66 67 256 65 257 260 65 258


1 2

sec. de salida BC CB BCA AC CBC CBCA AB BCAB

13

cdigos de entrada: 66, 67, 256, 65, 257, 260, 65, 258, 263

Tabla 12. Proceso de descompresin LZW (caso especial)

Contenido de la tabla raz O 1 2 ..... 60 61 62 63 64 65 66 67 Carcter Cdigo 0 1 2 ..... 60 61 62 63 64 65 66 67 hijo 0 0 0 ..... 0 0 0 0 0 259 256 257

..... < = > ? @ A B C

Pag. 1-28 68 70 ..... 251 252 253 254 255 D E ..... 68 69 ..... 251 252 253 254 255 0 0 ..... 0 0 0 0 0

Fig..9 (a). Las 256 races en el compresor

contenido de la tabla nodo 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 Prefijo B C BC A CB CBC A BCA BCAB AC AB CBCA A AA AAA AAAA B AC BA CB BA cdigo 66 67 256 65 257 260 65 258 263 259 262 261 65 268 269 270 66 259 272 257 272 extensin C B A C C A B B A A C A A A A B A B C B B hijo 258 260 263 265 261 267 266 264 0 0 0 0 269 270 271 0 274 0 0 0 0 hermano 0 0 0 262 275 0 268 0 277 273 0 0 0 0 0 0 0 0 276 0 0

Fig. 9 (b). El resto de los nodos en el compresor

A 65 [259] AC 259 [C,265,262] ACA 265 [A,0,273] ACB 273 [B,0,0] AB 262 [B,266,268] ABC 266 [C,279,0]

B 66 [256] AA BC BA 268 256 272 [A,269,0] [C,258,272] [A,274,0] AAA 269 [A,270,0] AAAA 270 [A,271,0] BCA 258 [A,263,0] BCAB 263 [B,264,0] BAC 274 [C,0,0]

C 67 [257] CB 257 [B,260,0]

BAB CBC CBB 276 260 275 [A,0,0] [C,261,275] [B,0,0] CBCA 261 [A,267,0]

Pag. 1-29
AAAAB 271 [B,0,0] BCABA 264 [A,0,0] CBCAA 267 [A,0,0]

Fig. 9 (c). El rbol en el compresor Fig. 9. Resultado final de la compresin LZW

Raz 0 1 2 ..... 60 61 62 63 64 65 66 67 68 69 ..... 251 252 253 254 255

Caracter

..... < = > ? @ A B C D E .....

Fig. 10 (a). Las 256 races en el descompresor

contenido de la tabla nodo 256 257 258 259 260 261 262 263 264 265 266 267 extensin C B A C C A B B A A C A padre 66 67 256 65 257 260 65 258 263 259 262 261 sec. de salida BC CB BCA AC CBC CBCA AB BCAB BCABA ACA ABC CBCAA

Pag. 1-30 268 269 270 271 272 273 274 275 276 A A A B A B C B B 65 268 269 270 66 259 272 257 272 AA AAA AAAA AAAAB BA ACB BAC CBB BAB

Fig. 10 (b) El resto de las races en el descompresor

A 65

B 66

C 67

AC 259 [C,65]

AB 262 [B,65]

AA 268 [A,65]

BC 256 [C,66]

BA 272 [A,66]

CB 257 [B,67]

ACA 265 [A,259]

ACB 273 [B,259]

ABC 266 [C,262]

AAA 269 [A,268] AAAA 270 [A,269] AAAAB 271 [B,270]

BCA 258 [A,256] BCAB 263 [B,258] BCABA 264 [A,263]

BAC 274 [C,272]

BAB 276 [B,272]

CBC 260 [C,257] CBCA 261 [A,260] CBCAA 267 [A,261]

CBB 275 [B,257]

Fig. 10(c) El rbol en el descompresor

Fig.10. Resultado final de la descompresin LZW

El procedimiento para aadir una nueva cadena al diccionario se debe modificar si la tabla se llena. Cuando esto ocurre, se pueden seguir 2 procedimientos distintos: 1. Borrar la tabla y empezar a reconstruir otro diccionario con los datos de entrada. 2. Cada vez que se va a aadir una cadena nueva, borrar una cadena existente para as hacer espacio. La primera solucin es mucho ms simple de programar, pero tiene la desventaja de que se pierde toda la informacin acumulada. En compensacin la longitud de los cdigos empieza de nuevo desde 9 bits. La segunda solucin conserva la informacin, la cual se va actualizando continuamente ya que las cadenas viejas son reemplazadas por otras recientes (es decir que la tabla se mantiene siempre llena). Sin embargo esta ventaja es en parte anulada por el hecho que una vez llenada la tabla, la longitud de los cdigos se mantiene constante (tpicamente 12 bits). Adicionalmente la programacin se complica, ya que el rbol

deja de ser ordenado porque los nodos que son creados no van a estar en orden creciente. A continuacin vamos a discutir con ms detalles esta solucin. El problema ms serio que se presenta es llevar el control de las cadenas viejas que se van a borrar del diccionario. Es evidente que no se pueden borrar cadenas que sean el prefijo de otras cadenas, ya que estas ltimas quedaran indefinidas. En otras palabras, hay que borrar cadenas que correspondan a nodos terminales (hojas del rbol). Por lo que se refiere al compresor, es relativamente fcil encontrar estos nodos terminales: son aquellos que no tienen ni hijos ni hermanos menores. De manera que una vez que se ha llenado la tabla, bastara con empezar de nuevo desde el nodo 256 incrementando este valor mientras no se cumpla la condicin antes mencionada. Una vez encontrada una hoja, sta se despega y queda libre para otra cadena. El hecho de despegarla significa que hay que borrar en el nodo del padre (o en el nodo del hermano mayor) la informacin de que es el hijo (o el hermano menor). Para esto se requiere aadir en cada

nodo un apuntador a su ascendiente (padre o hermano), tal como se indica en la figura 11. En el descompresor, la situacin es todava ms compleja, ya que la tabla no tiene informacin de hijos o hermanos, sino slo de padres. Una manera de determinar si un nodo es
A 65 [259] AC 259 [C,265,262,65]

Pag. 1-31 terminal, es aadir 2 datos adicionales a cada nodo: un dato que indique qu nmero de hijo es ese nodo y otro dato que indique la cantidad de hijos que posee ese nodo. Esta nueva estructura se ilustra en el ejemplo de la figura 12.

AB 262 [B,266,268,259]

AA 268 [A,269,0,262] AAA 269 [A,270,0,266]

ACA CB ABC 265 273 266 [A,0,273,259] [B,0,0,265] [C,279,0,273]

Figura 11. Mantenimiento del rbol en el compresor


A 65 [3] AC 259 [C,65,1,2] AB 262 [B,65,2,1] AA 268 [A,65,3,1]

ACA ACB ABC AAA 265 273 266 269 [A,259,1,0] [B,259,2,0] [C,262,1,0] [A,268,1,0]

extensin

padre

hijo No.

nm. de hijos

Figura 12. Mantenimiento del rbol en el descompresor

Con esta informacin se puede chequear si por ejemplo, el nodo 265 es terminal, de la siguiente manera: El cuarto campo contiene el valor 0, lo cual significa que 265 no tiene hijos (pero podra tener hermanos menores). El segundo campo contiene el valor del padre de 265, esto es 259. Al ir a este nodo, se encuentra que tiene el valor 2 en el cuarto campo, que representa el nmero de hijos. Para saber que nmero de hijo es 265, se ve su tercer campo que contiene el valor 1, lo cual indica que 265 es el hijo primognito de 259. Como 259 tiene 2 hijos, esto significa que 265 tiene un hermano menor y en consecuencia no es un nodo terminal. En cambio, 273 s es un

nodo terminal, ya que no tiene hijos (0) y es el hijo No. 2 del padre 259 que tiene 2 hijos, luego es el ltimo hijo. El programa ARCHLZW.EXE desarrollado por el Prof. Vincenzo Mendillo permite comprimir y descomprimir archivos utilizando una estructura de rbol binario. El tamao del rbol se puede seleccionar con el fin de experimentar su influencia sobre la razn de compresin. Los cdigos son de longitud variable para mejorar la eficiencia, de acuerdo a lo explicado anteriormente. Adems se puede ver paso a paso el proceso de compresin y de descompresin para fines didcticos.

1.9. Compresin LZSS y ZIP


En 1982 James Storer y Thomas Szymanski [28] propusieron una mejora de LZ77 y que fue llevada a la prctica por Haruhiko Okumura in 1988 bajo el nombre de LZSS. Esta mejora elimina algunos de los cuellos de botella presentes en LZ77, particularmente el excesivo tiempo de compresin. Para eso se hacen ciertos cambios en la forma cmo trabaja LZ77 y el ms importante tiene que ver con la gestin de la ventana deslizante. Con LZ77 las cadenas en la ventana eran almacenadas como un slo bloque de caracteres contiguos, sin otra organizacin por encima. LZSS usa una estructura de datos

adicional en forma de rbol binario, para as mejorar la organizacin de las cadenas. A medida que cada cadena es procesada y codificada, LZSS la aade al rbol. El rbol se utiliza para guardar las cadenas que se encuentran actualmente en la ventana. Su estructura contiene 3 elementos: padre, hijo_inferior e hijo_superior. Para cada cadena en la ventana existe un nodo en el rbol y cada nodo posee un nodo padre y hasta 2 nodos hijo. Un hijo_inferior es inferior al padre, mientras que un hijo_superior es superior al padre. Los trminos inferior y superior hay que entenderlos en el mismo sentido que se usan para comparar cadenas lexicogrficamente. As, LIBRO < RAMA ya que LIBRO se

Pag. 1-32 encuentra antes en el diccionario. Si la ventana es de tamao N y el buffer es de tamao B, en un dado momento en la ventana (y en el rbol) habr N cadenas de longitud B. Para explicar someramente la operacin de LZSS, tomemos el mismo ejemplo usado en LZM y supongamos que un dado momento durante el proceso de compresin, en la ventana se encuentra la cadena: INCENZO_MENDILL_APR La cual es parte de la secuencia de entrada:

Si N = 20 y B = 5, el rbol se muestra en la figura 13, donde solamente estn indicadas las primeras 14 cadenas. El primer carcter fuera de la ventana es E y para averiguar si hay una cadena duplicada en la ventana, se va al nodo 1, que es la raz, y se compara E con I. Como E < I, se salta al hijo_inferior del nodo 1, que es el nodo 3, y se compara E con C. Como E > C, se salta al hijo_superior del nodo 3, que es el nodo 4. Aqu se encuentra una coincidencia (match), por lo que se procede a comparar el segundo carcter, esto es N, que tambin coincide, formando as EN. El tercero, esto es D, ya no coincide, y como D < Z, se salta al hijo_inferior del nodo, esto es el nodo 10, donde de consigue la D, formando as END. Igualmente se consigue el cuarto carcter, esto es I, en el mismo nodo 10, formando as ENDI. El quinto carcter, esto es O, no est en el nodo 10, luego se busca el hijo_superior, ya que O > L, pero como ese hijo no existe, termina la comparacin. Luego de esta etapa, la ventana se desliza de 4 posiciones, lo cual significa que hay que actualizar el rbol, borrando los nodos 1, 2, 3 y 4 y aadiendo otros 4. El nodo 5 pasar a ser la nueva raz. Esta tarea del mantenimiento del rbol no es sencilla. Por ejemplo, para eliminar el nodo 4 hay que despegarle sus 2 nodos hijos y pegarlos a otros nodos apropiadamente. Una forma es primero despegar de l el nodo 13, el cual se pega al nodo ms cercano a su izquierda que tenga su hijo_superior libre (esto es el nodo 10). Luego se despega el nodo 10 y se pega al nodo ms cercano a su izquierda que tenga su hijo_superior libre (esto es el nodo 8). Ntese la ventaja de ordenar las cadenas en forma de rbol binario, ya que el tiempo requerido para encontrar la pareja ms larga en la ventana ya no es proporcional al producto del tamao de la ventana por la longitud de la cadena, sino que es proporcional al logaritmo en base 2 del tamao de la ventana por la longitud de la cadena, lo cual reduce drsticamente el tiempo de corrida durante la compresin.
1 INCEN 3

CENZO 8 _MEND 10 ENDIL 12 DILLO 14 4 ENZO_ 13

NCENZ 9 MENDI 11 ILLO_ NDILL 5 NZO_M 6 ZO_ME 7 LLO_A O_MEN

Figura 13. Ejemplo de rbol en LZSS

Existe otra forma de acelerar la bsqueda y no es con una estructura de rbol sino usando hashing, tal como se explic con relacin a la compresin LZW. Un programa de compresin muy poderoso que utiliza esta modalidad es PKZIP, el cual fue escrito por Phil Kratz y que ha alcanzado una gran popularidad. PKZIP permite utilizar distintos mtodos compresin, inclusive uno basado en LZW (mtodo 1, Unshrinking), pero el ms poderoso es el mtodo 8 (Deflating), basado en LZ77. El formato de los archivos ZIP creados por PKZIP es muy elaborado, pero Kratz public un documento con esa informacin, lo cual facilit que posteriormente aparecieran una gran cantidad de productos comerciales compatibles con el formato ZIP. El documento en cuestin es APPNOTE.TXT y se encuentra en el archivo PKZIP.ZIP del disco 1. Tambin se encuentra all una versin revisada llamada APPNOTE2.TXT y los archivos ejecutable PKZIP.EXE y PKUNZIP.EXE. El formato ZIP se ha vuelto un estndar de facto para la compresin de archivos y es utilizado actualmente en numerosas utilidades y programas de compresin de dominio pblico, tal como en la biblioteca de rutinas en lenguaje C de ZLib e Info-Zip, las cuales pueden ser utilizadas por los desarrolladores de software [29]. En Internet, ZLib mantiene su

home page en http://quest.jpl.nasa.gov/zlib/. La rutina de compresin de ZLib se llama Deflate (que se puede traducir como Desinflar) y se basa en gran parte en el mtodo Deflating de PKZIP. Pero Deflate es ms que un mtodo o un algoritmo, y se puede considerar un formato para la compresin de datos sin prdidas. Fue desarrollado inicialmente por Jean-loup Gailly de Francia y fue propuesto como un documento oficial de Internet bajo el nombre RFC1951 por Peter Deutsch en mayo de 1996 [30]. Deflate posee una serie de mritos, entre los cuales cabe destacar: 1. Es independiente del tipo de CPU, sistema operativo y estructura de los archivos, lo cual permite compilarlo y utilizarlo para una amplia variedad de plataformas (Unix, DOS, VMS, etc.) 2. Comprime los datos con una eficiencia y velocidad comparable con los mejores mtodos conocidos de compresin sin prdidas. En particular, es muy superior a LZW utilizado en COMPRESS. 3. No est patentado y tampoco requiere licencia, por lo cual puede ser usado libremente. 4. Es compatible con el formato usado por PKZIP. Deflate se basa en LZ77 pero introduce una serie de mejoras que permiten lograr una alta compresin en un tiempo de procesamiento muy corto. Se utiliza una ventana o diccionario deslizante de un tamao de 32 KB. La longitud mxima de las cadenas es 258 bytes y la mnima 3. Al igual que en LZ77, se procesan los caracteres de entrada, buscando una cadena duplicada en la ventana que contiene los datos previos ya procesados. Si se consigue una cadena duplicada de al menos 3 caracteres, entonces se codifica su posicin P hacia atrs en la ventana y su longitud L, En caso contrario se codifica el carcter de entrada C. Una mejora sustancial de Deflate con respecto a LZ77 es que los cdigos para P, L y C no son de longitud fija, sino variable (por tal razn son llamados cdigos de Huffman). Con esto se consigue una mejor adaptacin a la estadstica de los datos. Se utiliza una nica tabla de Huffman para codificar tanto L como C, segn se explicar luego. Una segunda tabla de Huffman se utiliza para codificar P. Estas tablas se envan al principio del bloque en forma codificada para lograr todava mayor compresin. Los archivos se procesan como una serie de bloques, donde cada bloque es tpicamente de hasta 32K o 64K. Existen 3 tipos de bloques: (a) sin compresin, (b) comprimidos con cdigos de Huffman dinmicos y (c) comprimidos con cdigos de Huffman estticos. El compresor decide cul esquema de compresin va a utilizar de acuerdo a las caractersticas de cada bloque. Si ste es incompresible (es decir contiene datos muy aleatorios), entonces los datos no se codifican y se envan exactamente igual a la salida (bloque tipo a). Si en cambio los datos son compresibles, entonces se utiliza una tabla de Huffman esttica o una tabla de Huffman dinmica. En la compresin dinmica (bloques tipo b), el bloque de datos comprimidos est precedido por las 2 tablas de Huffman antes mencionadas y las cuales se requieren para que el

Pag. 1-33 decodificador pueda procesar correctamente el bloque. Estas tablas en realidad no se envan como tales, sino que a su vez se comprimen con cdigos de Huffman! El mtodo dinmico permite optimizar los cdigos a la estadstica de los datos, de manera que se logra en general una alta compresin. Se puede decir entonces que este mtodo es en realidad la combinacin de dos algoritmos distintos. El primero (esencialmente LZ77) comprime las cadenas repetidas utilizando una ventana deslizante y el segundo comprime la salida del primero, utilizando codificacin Huffman. Pero para bloques o archivos cortos, la presencia de estos datos adicionales puede perjudicar la compresin, en cuyo caso se utiliza una tabla esttica, conocida de antemano por el compresor y el descompresor, por lo que no hace falta enviarla junto con los datos (bloques tipo c). Como ya se mencion, la codificacin para C y L se hace con una nica tabla de Huffman, la cual contiene valores llamados literales que van desde 0 hasta 287, mostrados en la Tabla 13.

Literal 0-143 144-255 256 257-279 280-287

Cdigo binario 00110000-10111111 110010000-111111111 0000000 0000001-0010111 11000000-11000111

Tamao en bits 8 9 7 7 8

Tabla 13. Codificacin de los literales

Esta tabla se genera automticamente a partir de los 287 tamaos de los cdigos, utilizando la forma cannica de la codificacin Huffman, tal como se explic en una seccin anterior. Los valores ms bajos, desde 0 hasta 255, corresponden directamente a los caracteres C. Por ejemplo, un carcter con valor ASCII 0 sin pareja en la ventana se codificara como 00110000 de 8 bits y un carcter con valor ASCII 255 sin pareja en la ventana se codificara se codificara como 111111111 de 9 bits. Los dems literales, desde 257 a 285, representan un valor base que conjuntamente con bits extra, se usan para codificar la longitud L de la cadena, buscando previamente en la Tabla 14 el literal correspondiente. El literal 256 es un valor especial que indica fin del bloque (EOB). Los literales 286 y 287 realmente no se usan, pero participan en la construccin en forma cannica de la Tabla 13. Como ilustracin, L = 3 corresponde al literal 257, luego se codifica como 0000001 (7 bits). L = 115 corresponde al literal 280, que se codifica como 11000000, pero seguido de los siguientes 5 bits extra: 00000 (ya que es el primer valor de los 32 valores), luego el cdigo completo es de 12 bits. Por ltimo, L = 130 tambin corresponde al literal 280, que se codifica como 11000000, pero seguido de los siguientes 5 bits extra: 11111 (ya que es el ltimo de los 32 valores).

Longitud

Literal

Bits extra

Longitud

Literal

Bits extra

Longitud

Literal

Bits extra

Pag. 1-34
3 4 5 6 7 8 9 10 11,12 13,14 257 258 259 260 261 262 263 264 265 266 0 0 0 0 0 0 0 0 1 1 15,16 17,18 19-22 23-26 27-30 31-34 35-42 43-50 51-58 59-66 267 268 269 270 271 272 273 274 275 276 1 1 2 2 2 2 3 3 3 3 67-82 83-98 99-114 115-130 131-162 163-194 195-226 227-257 258 277 278 279 280 281 282 283 284 285 4 4 4 4 5 5 5 5 0

Tabla 14. Codificacin de la longitud de la cadena

La Tabla 15 muestra cmo se codifica la posicin P de la cadena. Ntese que hay 30 cdigos base que utilizan 5 bits cada uno. Se requieren entonces bits extra para poder codificar posiciones hasta 32 K. Como ilustracin del uso de esta tabla, consideremos la codificacin de una cadena en la posicin P = 17 y otra en la posicin P = 32768. Para P = 17, el cdigo base
Longitud 1 2 3 4 5,6 7,8 9-12 13-16 17-24 25-32 Cdigo 0 1 2 3 4 5 6 7 8 9 Bits extra 0 0 0 0 1 1 2 2 3 3 Longitud 33-48 49-64 65-96 97-128 129-192 193-256 257-384 385-512 513-768 769-1024

es 8 y corresponde a 01000 en binario. Los 3 bits extra son 000. Para P = 32768 el cdigo base es 29 y corresponde a 11101 en binario. Los 13 bits extra son todos 1. De manera que en definitiva P = 17 se codifica con 8 bits y P = 32768 con 18 bits.

Cdigo 10 11 12 13 14 15 16 17 18 19

Bits Extra 4 4 5 5 6 6 7 7 8 8

Longitud 1025-1536 1537-2048 2049-3072 3073-4096 4097-6144 6145-8192 8193-12288 12289-16384 16385-24576 24577-32768

Cdigo 20 2 22 23 24 25 26 27 28 29

Bits extra 9 19 10 10 11 11 12 12 13 13

Tabla 15. Codificacin de la posicin de la cadena En el caso de que se use compresin dinmica, las tablas son ms cortas, ya que por lo general no todos los caracteres C, longitudes L y posiciones P van a aparecer en un determinado bloque. Entonces se van a requerir menos bits para representar los literales y los valores base para L y P, logrando as mejor compresin. Adems de utilizar cdigos de longitud variable, Deflate introduce una mejora significativa en el algoritmo de bsqueda de cadenas repetidas. Para eso se utiliza una funcin hash que opera cadenas de 3 bytes. En un dada momento durante la compresin, sean XYZ los caracteres de entrada al compresor. En primer lugar se examina la serie de cadenas encontradas al aplicar la funcin hash a XYZ. Si no hay cadenas, se emite el cdigo del literal X y se avanza un byte. Si en cambio hay cadenas, significa que XYZ ya ha aparecido antes (o si se tiene suerte, otra combinacin de 3 caracteres con el mismo valor de la funcin hash). Entonces se compara toda la serie de cadenas guardadas correspondientes a esa funcin hash seleccionando la ms larga. Esta bsqueda se hace empezando por las cadenas ms recientes, para as favorecer las posiciones ms cortas y beneficiarse de la codificacin Huffman, tal como ilustra la Tabla 15. En Deflate no se borran directamente las cadenas guardadas, sino que se desechan las cadenas que son muy viejas. Deflate permite tener un cierto control por parte del usuario sobre la velocidad de compresin, lo cual se logra a travs de un procedimiento llamado lazy matching, que se puede traducir como aparejamiento perezoso. Despus que se ha encontrado una pareja de una dada longitud, el compresor trata de buscar una todava ms larga. Pero si se quiere acelerar el proceso, se detiene la bsqueda luego que se ha conseguido una cadena suficientemente larga. Esto degrada el factor de compresin, pero ahorra tiempo. El proceso de descompresin para Deflate es conceptualmente simple. Se determina el valor del cdigo de entrada: Si ese valor es 256, se trata del cdigo especial EOB (fin del bloque); Si es menor de 256, significa que es un literal (C) y se enva directamente a la salida. Si no, es un valor entre 257 y 285, por lo cual se extrae la longitud (leyendo y aadiendo los eventuales bits extra) y la posicin (tambin leyendo y aadiendo los eventuales bits extra). Por ltimo se copia la cadena y se enva a la salida. En la descompresin de utiliza por lo general una tabla de tipo look-up para maximizar la velocidad del proceso. Uno de los mejores algoritmos de descompresin es Inflate, escrito por Mark Adler en lenguaje C y que tambin es una de las rutinas en C de ZLIB y de InfoZip. Las especificaciones y el cdigo fuente de Deflate e Inflate (en lenguaje C) se encuentran en el archivo INFOZIP.ZIP del disco 1, en el cual adems se incluye RFC1951.TXT (que

Pag. 1-35 describe el formato de Deflate).

1.10. Productos para la Compresin de Datos


Es solamente en los ltimos 10 aos que se dispone de software o programas de compresin de datos de propsito general. De hecho, no fue sino alrededor de 1980 que empezaron a ser comunes computadoras con la potencia necesaria para lograr una compresin efectiva. En el ambiente Unix, uno de los primeros programa de compresin de archivos fue COMPACT, el cual utilizaba codificacin Huffman adaptable de orden 0. Este programa alcanzaba suficiente compresin para que fuera til, aunque era lento. Los usuarios Unix ya estaban acostumbrados a utilizar TAR (Tape Archiving) con el fin de unir varios archivos uno solo para luego ser guardado como respaldo en cinta magntica (pero sin compresin). A principios de los aos 80 empezaron a aparecer para los usuarios de sistemas CPM y DOS archivadores con nombres como LUE que guardaban en solo archivo varios archivos relacionados pero no los compriman (al igual que TAR), y tambin utilidades de compresin, entre ellos SQ y MTSQ, que compriman archivos individuales o mltiples utilizando un rbol de Huffman esttico de orden 0. Con estos productos se lograba un grado de compresin comparable a COMPACT y fueron utilizados por los pioneros en las comunicaciones va mdem para tener acceso a los BBS (Bullettin Board Systems). A partir de 1985 se hizo disponible libremente para los usuarios de Unix el programa COMPRESS, el cual utilizaba el algoritmo de compresin LZW y alcanzaba una razn de compresin mucho mayor que COMPACT, siendo adems mucho ms rpido. El cdigo fuente de COMPRESS estaba disponible en forma de dominio pblico y exportable a diferentes plataformas. En ambiente DOS la codificacin Huffman fue rpidamente desplazada por la compresin LZW con la llegada de ARC en 1985, un programa de propsito general que permita adems la compresin de mltiples archivos y su catalogacin, funcionando entonces como un archivador-compresor. Y mientras COMPRESS se volva prcticamente un estndar de facto en el ambiente Unix, en el mundo de los PCs lo haca ARC en cuestin de meses, siendo distribuido por una pequea compaa de shareware, Systems Enhancement Associates (SEA) de los Estados Unidos. ARC originalmente poda comprimir los archivos usando 3 tcnicas: RLE, codificacin esttica Huffman de orden 0 y LZW. Esta ltima que fue adaptada a partir del programa fuente de COMPRESS para Unix. A raz de la rpida distribucin hecha posible por medio del concepto del shareware y con los BBS accesibles va mdem, ARC se volvi muy popular y estimul la aparicin de productos similares. Pero a pesar de que ARC ha sido modificado y mejorado en los ltimos aos (ARCPlus), su popularidad ha ido decreciendo. En 1986 el programador Phil Katz apareci en escena en los Estados Unidos. Katz escribi dos programas shareware (llamados PKARC y PKXARC) de compresin/expansin que podan leer y escribir el formato ARC de SEA, pero mucho rpidamente. Los dos programas pronto comenzaron a ser usado por otros fabricantes de software para comprimir la informacin contenida en los diskettes de distribucin de programas comerciales. En 1988, SEA demand a PKWare, la compaa de Katz, alegando violaciones de la marca registrada y derechos de autor, copia de cdigo, y prcticas comerciales injustas. Katz firm una declaracin en la que no admita culpabilidad pero donde renunciaba al nombre ARC, dejaba de producir programas de compresin compatibles con ARC y acceda a pagar daos. Cuando un nuevo programa de Katz, llamado PKZIP, sali a finales de 1988, varios sistemas de boletines electrnicos y fabricantes de software se cambiaron de ARC a ZIP y en un ao el formato ZIP se haba convertido en el nuevo estndar, el cual se mantiene hasta hoy. PKZIP es una pieza de ingeniera de software admirable que ofrece al mismo tiempo una elevada razn de compresin y velocidad a travs de varios algoritmos basados en LZ77 y LZ78. La ltima versin shareware para DOS es la v2.04g de 1993 y puede encontrarse fcilmente en muchos sitios en Internet. La compaa PKWare distribuye la versin comercial de PKZIP y adems PKWIN (para ambiente Windows). PKWare suministra su Data Compression Library para MSDOS y para Windows a un precio de varios centenares de dlares. Como ya se mencion, Phil Kratz public el formato de los archivos ZIP (si bien no explic todos los detalles del algoritmo), por lo que existen ahora muchos otros programas y utilidades de compresin que soportan el formato ZIP, por ejemplo WINZIP, el cual se integra con el administrador de archivos de Windows para as proveer una interfaz ms amigable con el usuario. Dos competidores de PKZIP son LHARC y ARJ, que tambin se basan en LZ77. El primero viene de Japn y posee varias ventajas. En primer lugar, su programa fuente es de dominio pblico y puede ser fcilmente ser adaptado a numerosos sistemas operativos y plataformas de hardware. En segundo lugar, el autor de LHARC, el matemtico Haruyazu Yoshizaki (Yoshi) ha explcitamente otorgado el derecho de usar su programa para cualquier propsito personal o comercial. As como PKZIP era tpicamente un 10 por ciento mejor que el antiguo ARC en la velocidad de compresin, LHARC fue un 10 por ciento mejor que PKZIP cuando sali en 1989. Con el reto en marcha, Katz regres a su programacin y lleg a igualar a LHARC. Yoshizaki por su lado mejor LHARC en 1992 utilizando un algoritmo LZ77 con rbol de Huffman esttico en vez de dinmico y adems utilizando tablas hash para la descompresin. Por lo que se refiere a ARJ, ste es un producto desarrollado por Robert Jung en EE.UU. a partir de 1991 y es de uso libre para aplicaciones no comerciales, por lo que se utiliza extensamente en los BBS. Con ARJ se logra generalmente un factor de compresin algo mejor que LHARC.

Otros programas, herramientas y utilidades que han surgido en los aos recientes son ZOO, HPACK, Squeeze, RAR, UltraCompressorII, CRUSH, LU, ICE, HA, ACB, X1, GZIP, TGZ, ZIP y muchos ms. GZIP es una herramienta de compresin que puede ser compilada para distintas plataformas (Unix, VMS, MSDOS, Windows, OS2, etc.) y fue desarrollada un grupo del GNU, que es una organizacin informal compuesta por expertos e investigadores los cuales promueven tcnicas y algoritmos que puedan ser utilizadas libremente por los programadores o los usuarios sin tener que pagar licencia [31]. El algoritmo de compresin es Deflate y el de descompresin es Inflate. GZIP acta tambin como descompresor, mediante la opcin d, pero no es capaz de actuar como un archivador de mltiples archivos, por tal razn se usa a menudo en conjuncin con una utilidad TAR. Con TAR se apilan varios archivos en uno solo y este archivo se comprime luego con GZIP. El resultado final es un archivo que en Unix tiene tpicamente la extensin tar.gz o tar.z (la extensin Z mayscula se usa para la compresin con COMPRESS). La ventaja de este procedimiento es que se aprovecha la redundancia entre archivos contiguos, lo cual puede producir en muchos casos mejor compresin que PKZIP, donde cada archivo es comprimido individualmente. La desventaja es que tanto en la compresin como en la descompresin se genera un archivo temporal tipo tar que puede ser muy grande. Por esta razn han surgido productos que efectan el proceso de una sola vez, sin crear el archivo temporal. Un buen ejemplo es el programa TAR de Tim Shaporev (Rusia). El cdigo fuente en C de este programa sirvi de base al Prof. Vincenzo Mendillo para desarrollar una aplicacin llamada VMZIPT que pudiera utilizarse para comprimir los archivos requeridos para su software educativo. Para la descompresin se utiliz UNTGZ de Tillman Steinbrecher (Alemania), que sirvi de base para la aplicacin VMUNZIPT. Otra importante herramienta de compresin de dominio pblico es ZIP, desarrollada por el grupo Info-Zip, muchos de cuyos miembros tambin pertenecen a GNU [32]. Por tal razn GZIP y ZIP son parecidos. ZIP es un compresor y un archivador de propsito general y funciona en forma semejante a PKZIP. El algoritmo de compresin es Deflate. El programa de descompresin se llama UNZIP y se base en Inflate. En Internet hay muchos sitios donde se pueden conseguir herramientas de compresin y archivadores, tanto va ftp annimo o va Web. Uno de ellos es oak.oakland.edu en el directorio /Simtel/msdos/archive. Otro es garbo.uwasa.fi en el directorio /pc/archers. Jeff Gildchrist publica peridicamente en Internet un documento llamado ACT (Archive Comparison Test) donde compara ms de 60 distintos programas en lo relativo a velocidad y eficiencia, aplicando la compresin a una amplia variedad de fuentes: archivos de texto, binarios, ejecutables, grficos, etc. En el WWW, los resultados de ACT se pueden conseguir en: ftp://ftp.simtel.net/pubits/simtelnet/msdos/arcers/actest30.zip. El disco duro ha sido un rea donde ms recientemente se ha aplicado la compresin de datos y han aparecido muchos productos en el mercado que trabajan en segundo plano, comprimiendo y expandiendo archivos cuando se tiene acceso a los mismos, en una forma totalmente transparente al usuario,
H H

Pag. 1-36 y lo que es ms importante, al sistema operativo. Este tipo de compresin (llamada tambin compresin sobre la marcha o compresin en tiempo real) usa hardware, software o ambos para lograr la compresin de discos enteros o de porciones de discos. El proceso aparece como una duplicacin del tamao del espacio disponible en varios tipos de medios (fijos o removibles) [33]. El primero producto comercial en aparecer fue Stacker, de la empresa STAC Electronics. Fue seguido por SuperStor (utilizado tambin por IBM). Por su lado Microsoft lanz DoubleSpace y posteriormente DriveSpace. El rendimiento de estos compresores es bastante bueno, lo cual se debe al hecho que, si bien el proceso de compresin y descompresin consume ciclos adicionales de CPU, esto se compensa por la menor cantidad de bytes que deben transferirse entre el disco duro y la memoria RAM. Cuando un proceso mecnico (mover fsicamente el cabezal del disco) compite un proceso electrnico (comprimir y descomprimir datos en la memoria), usualmente este ltimo gana. La compresin y expansin de los contenidos completos de discos duros a casi la velocidad normal de acceso requiere una programacin muy sofisticada. La mayora de los productos se basan en LZ77 y LZ78 y cuando sus fabricantes afirman que usan un algoritmo exclusivo, realmente quiere decir que han adaptado el algoritmo de compresin Lempel-Ziv en una forma nica y la han incorporado bien en una arquitectura de chip coprocesador o en software. Cmo crean esos productos de compresin ms espacio en una unidad de hardware como el disco que tiene lmites fsicos? La respuesta est en la interaccin entre los algoritmos de compresin y algunas reas grises en las leyes que gobiernan al sistema operativo (por ejemplo el DOS). Los diseadores del software de compresin aprovechan la rgida disciplina del DOS al seguir sus propias reglas para engaarlo, y hacer que d algo que no reconoce que tiene. Para comprender esto, se debe conocer la disposicin fsica de los archivos y los discos duros. Cuando se da formato a cualquier medio de almacenamiento, ste queda preparado para aceptar informacin en una forma en que el DOS pueda usarla lgicamente, y esta forma es la de bloques de longitud fija llamados sectores y racimos (clusters). El formato fija el tamao de los sectores como mltiplo de 512 bytes. E1 proceso de formato tambin agrupa los sectores en clusters. Cada cluster contiene un nmero fijo de sectores (por ejemplo 4), y esto se convierte en la unidad bsica de almacenamiento de un disco. El tamao del disco determina el nmero de clusters que contiene, y este rgido sistema deja mucho espacio sin aprovechar. Aunque un disco almacena la informacin en espacios de longitud fija, los archivos se procesan como elementos de informacin de largo variable. Digamos que un disco duro tiene un formato con clusters de 4 sectores de 512 bytes. Esto significa que cada cluster tiene 2.048 bytes. En este formato, un archivo de 12.536 bytes (ms o menos el largo de un documento de 2.100 palabras), ocupara 6 clusters completos y 248 bytes del prximo cluster disponible cuando se guarde en el disco. Esto deja sin usar 1.800 bytes de un cluster y perdidos para siempre como espacio de almacenamiento, ya que el DOS guarda los archivos al principio de un cluster vaco y no al final

de uno parcialmente lleno. En otras palabras, el DOS ignora cientos de miles de bytes de espacio libre de disco que los compresores pueden aprovechar sin problemas. Pero hay otras cosas ms. El hardware y software de compresin en tiempo real usan manejadores de dispositivo (device drivers) para reemplazar la interfaz de disco duro o para decirle al DOS que se ha aadido otro disco al sistema. Mientras que el manejador se comporte de acuerdo con las reglas de los dispositivos del DOS, el sistema operativo deja que la informacin se lea y se escriba libremente al dispositivo. En realidad, el dispositivo puede ser un archivo, una particin o un disco virtual, pero si el DOS lo reconoce como un disco normal, el dispositivo puede hacer lo que quiera dentro de los lmites de su propio espacio definido, lo que nos lleva al corazn del secreto de la compresin de datos sobre la marcha. Cada uno de los productos antes mencionados, manipula el espacio de disco disponible de forma similar, pero con su propia idiosincrasia, aplicando sus propios formatos a los espacios de dispositivo que crean al instalarse. Las peticiones de lectura y escritura al manejador de dispositivo para cada producto se manejan como cualquier otra transaccin del DOS. Pero dentro de cada espacio de dispositivo, se comprime o expande la informacin de acuerdo con la arquitectura del algoritmo. Esa arquitectura puede residir en hardware en una tarjeta coprocesadora o en software. Algunos algoritmos son ms eficientes que otros, y esto crea las diferencias en las razones de compresin. Las variaciones de rendimiento son funcin de cmo interacta el manejador de dispositivo con el procesador y la velocidad del sistema, de cmo se guarda la informacin en el disco comprimido y de la eficiencia con que el hardware o el software comprime y expande la informacin. A1 final, todo esto es invisible para el DOS y para el usuario. En un disco no comprimido un cluster es una unidad de asignacin de almacenamiento de un tamao fijo; sin embargo, en un disco comprimido, los clusters varan de tamao. La proporcin del tamao de un cluster de un disco en relacin con el tamao medio de un cluster comprimido es su razn de compresin. Cuanto ms grande sea la relacin de compresin, mayor ser la cantidad de datos que se acomoden en un disco de un tamao determinado. Para equilibrar la confiabilidad y la velocidad segn la cantidad de compresin que puede conseguir, se comprime cada cluster por separado y no se busca redundancias entre clusters. Los datos de un cluster comprimido se almacenan en un nmero entero de sectores de disco. El rea de almacenamiento que contiene los datos comprimidos y los dems componentes de compresin se denomina a veces archivo de volumen comprimido (CVF). Para dar soporte al proceso de compresin, se crea una tabla en el archivo de volumen comprimido que contiene una entrada para cada cluster comprimido. Sin embargo, y dado que la cantidad de redundancias vara de cluster a cluster, no existe un tamao fijo para los clusters comprimidos. Por tanto, no se puede conocer por adelantado cuntos clusters pueden comprimirse para que se ajusten al archivo de volumen comprimido que est creando. Para un disco fsico, la tabla FAT coincide exactamente con la cantidad de espacio de almacenamiento y el disco se llena

Pag. 1-37 cuando ambos estn completos. Para un disco comprimido, tanto las tablas como el espacio de almacenamiento pueden quedar llenos en primer lugar y cuando se produce alguna de las dos situaciones, el disco se llena. El DOS informa acerca de la cantidad de espacio libre que queda en un disco comprimido (por ejemplo, tal como hace al final de un listado de directorios o cada vez que se ejecuta CHKDSK). El nmero que se usa est basado en el nmero de entradas de tablas que no se utilizan en el archivo de volumen comprimido. Las ventajas de la utilizacin de la compresin de discos incluyen: El sistema de compresin/descompresin programa es transparente al DOS y a los programas de aplicacin. El usuario contina utilizando las aplicaciones y archivos tal como haca antes de instalarlo. Ello significa que los archivos comprimidos se descomprimen automticamente cuando se leen y se vuelven a comprimir cuando se graban. Usualmente no se necesita ningn hardware adicional. No es necesario aadir ninguna tarjeta para beneficiarse de la compresin de datos. Las ranuras de expansin quedan libres para otros usos. Todos los tipos de medio magntico, incluidos los discos removibles, estn soportados. El controlador monta automticamente (automonta) todas las unidades lgicas con medios magnticos removibles en el arranque: Cuando el medio magntico removible se inserta en una unidad, se detecta si se trata de un medio normal no comprimido o de un disco automontado. La compresin puede aplicarse a todo el disco o a una parte del mismo. El usuario puede especificar la relacin de compresin ptima para sus archivos. No es necesario utilizar la relacin de compresin estndar (tpicamente de 2:1) para archivos que se comprimen con mayor facilidad, como los archivos de grficos. La integridad de los datos est asegurada. No se puede reiniciar el sistema durante las operaciones crticas. Cuando se detecta un error, el disco se establece en estado de slo lectura. No se pueden grabar datos hasta que se ejecute un programa de reparacin para corregir el error. Como ya se mencion al principio, otra importante aplicacin de la compresin de datos es en las redes de comunicaciones. Al comprimir los datos aumenta el volumen de informacin transmitida por unidad de tiempo. Actualmente los algoritmos de compresin estn incorporados directamente en los mdems, pero esto requiere que haya hardware o software compatible en el otro extremo para efectuar la la descompresin sobre la marcha. La idea fue aplicada originalmente por la empresa Microcom, utilizando un cdigo de Huffman dinmico en un protocolo conocido como MNP (Microcom Network Protocol). MNP ha ido evolucionando en varias clases: Las clases 1 y 2 son protocolos asncronos y actualmente ya no se utilizan. Las clases 3, 4 y 5 son protocolos sncronos orientados a bits y utilizan un CRC de 16 bits para detectar errores en bloques de 64 bytes. Como son sncronos, no se requiere los bits de start y de stop, lo cual significa un aumento de la tasa efectiva de un 20%. La clase 4 es superior a la clase 3 ya que la longitud de los bloques se adapta automticamente a las condiciones de la

lnea: bloques cortos aumentan la eficiencia cuando una lnea pobre exige frecuentes retransmisiones, mientras que bloques largos la aumentan cuando la lnea est limpia. Es importante resaltar que los mdems que utilizan el MNP clase 3 y 4 aumentan la eficiencia eliminando los bits adicionales requeridos en la transmisin asncrona y no comprimiendo los datos en s. En cambio, el MNP clase 5 utiliza un esquema de compresin para reducir el nmero de bytes del mensaje original y que consiste en una codificacin RLE y un codificacin Huffman modificada. Con la primera tcnica los caracteres iguales seguidos se reducen al smbolo de ese carcter y a las veces que se repite: por ejemplo AAAAA se reduce a A5. Con la segunda tcnica los caracteres ms frecuentes se codifican con menos dgitos binarios: por ejemplo, la letra E con 2 dgitos y la letra Q con 10 dgitos. En el MNP clase 5 la tabla es fija y consiste de los siguientes cdigos: 4 de cuatro bits, 4 de cinco bits, 8 de seis bits, 16 de siete bits, 32 de ocho bits, 64 de nueve bits, 127 de 10 bits y 1 de 11 bits. La evolucin del protocolo MNP ha alcanzado la clase 9 y se incluye como opcin en muchos mdems avanzados. Por lo general es conveniente desactivar MNP cuando se transfieren archivos comprimidos ya que el intento de comprimirlos an ms, slo crea una carga adicional. Por ejemplo, transmitir archivos ZIP con MNP 5 activado puede demorar hasta un 10% ms que sin MNP. A nivel internacional el CCITT (ahora UIT-T) aprob hace algunos aos una tcnica de compresin basada en el algoritmo LZW en su recomendacin V.42bis, luego de exhaustivas pruebas comparativas con MNP5. Con este estndar listo, los fabricantes de mdems han incorporado la compresin de datos en sus productos con la confianza de que pueden entenderse con mdems de otros fabricantes [34]. Adems de los mdems, otros equipos de comunicacin incorporan cada vez ms la compresin de datos, tal como los enrutadores (routers) y los multiplexores [35-40]. A menudo se hace una combinacin de la compresin de datos y el multiplexado estadstico en una sola unidad. Esta integracin resulta en un doble beneficio para el usuario: 1. La compresin de datos se realiza en forma individual en cada canal, y reduce el nmero de bits a trasmitir. 2. El multiplexado estadstico aprovecha la naturaleza estadstica de los datos (no todos los canales transmiten al mismo tiempo) con lo cual se aprovecha mejor el canal comn. La experiencia ha mostrado que la razn de compresin en datos asncronos es aproximadamente 4:1, mientras que para los sncronos es normalmente 2: l. La integracin del multiplexado estadstico con la compresin de datos mejora el rendimiento de la transmisin sincrna hasta en 4:1. Un aspecto delicado que hay con las tcnicas de compresin es el problema de las patentes. Hasta principios de los aos 80 por lo general no era posible patentar software en pases como los Estados Unidos y en casi todo el resto del mundo. Sin embargo, durante los ltimos 10 aos se ha ido otorgando cada

Pag. 1-38 vez ms patentes a productos que a todas luces son simplemente algoritmos. Una de las primeras patentes sobre compresin de datos fue otorgada a la corporacin Sperry (ahora Unisys) por la mejora y realizacin del algoritmo LZ88 desarrollado por Terry Welch cuando trabajaba en esa empresa (conocido como algoritmo LZW). De hecho, esta patente se volvi un punto de discusin delicado en el seno del CCITT para la estandarizacin de la Recomendacin V.42bis, la cual est basado en LZW. Haba la preocupacin en el CCITT de basar un estndar en una tcnica patentada. Finalmente Unisys acept otorgar la licencia de uso a cualquier fabricante que la solicitase por un pago nico de $25.000. Despus de un silencio de varios aos, Unisys recientemente emprendi acciones legales buscando pago de licencia por parte de Compuserve y otros usuarios del popular formato grfico GIF. Para muchos esta actitud no es razonable, dato el gran lapso de tiempo que ha transcurrido desde la introduccin del formato GIF y la inesperada solicitud del pago de licencia, ahora que ese formato ha ganado una amplia aceptacin. La respuesta a la accin de Unisys ha sido creativa en vez de conflictiva: Varios expertos unieron sus esfuerzos y en poco tiempo produjeron el nuevo formato PNG (Portable Network Graphics), el cual adems de introducir muchas mejoras con respecto a GIF, no requiere licencia. Igualmente COMPRESS, que todava se usa hoy en el ambiente Unix y DOS, puede que quede virtualmente descartado debido a que utiliza LZW. A medida que continua la investigacin y el desarrollo de nuevas tcnicas de compresin, se solicitan patentes a un ritmo relativamente rpido. Debido a que las solicitudes de patente no se hacen pblicas, no es posible conocer si y cuando ciertas tcnicas estarn disponibles libremente. En el documento COMPRFAQ.TXT ya citado se encuentra una amplia lista de patentes otorgadas sobre la compresin de datos. Con respecto al problema general de las patentes sobre software hay 2 puntos de vista. El primero de ellos considera que las patentes no son lo ms apropiado en un campo dinmico e innovador como lo es el software, donde un programa de computacin se desarrolla utilizando una gran cantidad de tcnicas, algoritmos y estructura de datos. Se afirma que las patentes pueden frenar la innovacin y el crecimiento econmico. El segundo punto de vista es que el proceso de patentes, si bien presenta fallas, est bsicamente bien concebido y debera conservarse. En aos recientes la Oficina de Patentes de los EE.UU. ha sido fuertemente criticada por otorgar patentes en casos en que no pareca lo apropiado, lo que ha llevado a reestructurar esa dependencia y emplear personal ms calificado. En todo caso y sin importar la posicin que hayan tomado, la mayora de las compaas de software se estn ocupando mucho ms que antes del problema de las patentes contratando expertos del tema, ya sea como una estrategia de negocios agresiva o una cautelosa maniobra de autodefensa. Por ejemplo Microsoft, histricamente indiferente al proceso de patentes, dispone ahora una buena cantidad de abogados expertos en el campo de la propiedad intelectual.

1.11. Reduccin de Datos, Wavelets y Fractales

Pag. 1-39 Las tcnicas de compresin que hemos examinado hasta ahora modelan y codifican los datos sin ningn tipo de prdida de la informacin, de manera que los datos originales pueden ser recuperados completamente con la descompresin. Sin embargo, como se mencion al principio, existen tcnicas de compresin con prdida (lossy) con las cuales no es posible recuperar todos los datos originales, es decir obtener una copia exacta de los mismos, sino slo una copia aproximada. Estas tcnicas se utilizan a menudo cuando se procesan datos que son el resultado de una conversin analgica a digital de ciertas seales, tales como las que se encuentran en audio, fotografa, video, instrumentacin, bioelectrnica, sistemas de control y muchas otras aplicaciones. Los datos pueden corresponder a mediciones fsicas o los valores de una funcin matemtica. Cuando se tiene una serie de datos que correspondan a muestras de una seal analgica, a menudo no hace falta conservar todas esas muestras para reconstruir en forma aceptable la seal, en cuyo caso se pueden desechar partes de ellas. Se trata entonces de una tcnica de compresin conocida como reduccin de datos. Como ejemplo, en la modulacin por pulsos codificados (PCM) se utiliza una frecuencia de muestreo de 8 KHz para digitalizar la voz en un canal telefnico cuyo ancho de banda es de 300-3400 Hz. Si se utiliza esa misma frecuencia de muestreo para digitalizar y almacenar seales biolgicas o ssmicas, que varan mucho ms lentamente, se requerira una excesiva capacidad de almacenamiento. Una forma sencilla pero efectiva para reducir datos es usar el criterio de Nyquist, por medio del cual se puede determinar cuntas muestras realmente hacen falta, sin que el error sea superior a cierto lmite. El teorema del muestreo de Nyquist establece que una funcin f(t) con ancho de banda finito puede ser reconstruida exactamente a partir de una secuencia de muestras f(nT) bajo la condicin de que la frecuencia de muestreo 1/T sea mayor del doble de la frecuencia ms alta presente en el espectro de frecuencias de f(t). Utilizando el criterio de Nyquist, se puede encontrar un valor apropiado para el intervalo de muestreo T, probando con valores cada vez mayores de T hasta que el error excede un lmite establecido. La reconstruccin se puede hacer por hardware pasando las muestras por un filtro pasabajos con frecuencia de corte 1/2T y por software por medio de la suma de Nyquist:
+

f(t) =

n=-

f(nT)sen[(/T)(t-nT)]/(/T)(t-nT)

En realidad, esta frmula no es ms que la ecuacin que permite obtener f(t) a partir de muestras (impulsos) que se pasan a travs de un filtro pasabajos ideal con frecuencia de corte igual a 1/2T. Tmese en cuenta que un impulso en t = 0 que se pase por un filtro pasabajos ideal con frecuencia de corte fc, da lugar a una respuesta de la forma sen(2fct)/2fct. En nuestro caso cada muestra f(nT) que es pasada por el filtro da lugar a una respuesta retardada t-nT. En un algoritmo que utilice este criterio, se leen primeramente todos valores de las muestras originales f(nT), para n = -,, -2, -1, 0, +1, +2,,+. A continuacin el intervalo de muestreo se incrementa al doble (2T), lo que equivale a desechar una muestra de cada dos, es decir se trata de un submuestreo (down-sampling). Se aplica entonces la frmula para reconstruir la funcin en todos puntos de antes, esto es, incluyendo los desechados. Pero en los puntos desechados y reconstruidos habr una diferencia con respecto al valor exacto original. Si en ninguno de esos puntos el error supera el lmite admisible, el intervalo se incrementa al triple (3T) y se repite el proceso. En cada iteracin se utilizan menos muestras, hasta que finalmente el error se hace excesivo. Las muestras de la ltima iteracin exitosa entonces representan las que se pueden almacenar en lugar de las originales, habindose logrado as una reduccin de datos. La efectividad de este mtodo depende de la precisin que se requiera y del contenido de frecuencias de las muestras. Al ser ms errtica la variacin de los datos, mayor es el contenido de altas frecuencias y mayor es la frecuencia de muestreo requerida. En este sentido un factor importante es la transicin hacia el cero al principio y al final de la serie de datos, ya que por ser la serie truncada, los valores faltantes entre - y + son cero. Se pueden preprocesar los datos por medio de filtros digitales y ventanas apropiadas a fin de disminuir el contenido de altas frecuencias. El filtro reduce las fluctuaciones y discontinuidades, mientras que la ventana modula la truncacin cerca de los extremos. Es importante establecer cundo el contenido de altas frecuencias es artificial, esto es, debido a ruido o truncacin de la serie y cundo es intrnseco, ya que el pre-procesamiento indiscriminado puede llevar a resultados completamente errneos. Un ejemplo de filtro pasabajos se ilustra en la figura 14, donde se toma el promedio ponderado de 3 muestras consecutivas para eliminar fluctuaciones bruscas. Ntese que para cada 2 muestras X, se calcula una muestra Y, lo que equivale a eliminar la mitad de los datos originales.
B B B B B B

Muestras originales X X X X X

peso

1/4

1/2

1/4

1/4

1/2

1/4

Pag. 1-40

Y Muestras de salida Figura 14. Ejemplo de filtro digital

En los aos recientes han ido apareciendo otras tcnicas de compresin con prdidas bastante sofisticadas, como las basadas en las wavelets (literalmente pequeas olas), y que utilizan el concepto de transformacin de un dominio a otro (transformada), en forma anloga a la conocida Transformada del Fourier y a la Transformada Discreta del Coseno (DCT). Como se sabe, en principio cualquier seal puede ser representada como una superposicin de formas de ondas sinusoidales de diversas frecuencias. Pero si bien el anlisis de Fourier es muy apropiado para estudiar el comportamiento de seales que no varan bruscamente (como la voz), no es tan conveniente para representar seales con discontinuidades abruptas, tales como los cambios de tonalidad en los bordes de una imagen. En contraste con la onda sinusoidal en Fourier, la cual oscila para siempre, una wavelet se localiza en el tiempo, durando slo unos pocos ciclos. Al igual que el anlisis de Fourier, el anlisis de wavelet emplea un algoritmo para descomponer una seal en elementos ms simples. Esta nueva forma de anlisis de seal es ms eficiente que el anlisis de Fourier, siempre que una seal est dominada por comportamientos transitorios o discontinuidades, y se ha aplicado en diversos campos tales como procesamiento digital de seales para filtrar el ruido, compresin de datos e imgenes, astronoma y anlisis numrico. Las wavelets vienen en muchas formas y tamaos, y nuevas wavelets son inventadas casi a diario. Pero cualquier descomposicin de una seal en wavelets involucra solamente a un par de formas de onda bsicas, por ejemplo como las mostradas en la figura 15, que duran apenas unos cuantos ciclos.

Fig. 15. Ejemplo de wavelets bsicas

Formas como stas son los bloques constructivos para representar seales, especialmente seales con discontinuidades. Las dos formas son trasladadas en el eje del tiempo y aumentadas o disminuidas en amplitud para as producir wavelets en diferentes posiciones y en diferentes escalas. Las wavelets para una escala fina son estrechas y breves, y las wavelets para escalas gruesas son anchas y de mayor duracin. La serie y la transformada de Fourier representan a una seal como una superposicin de sinusoides con diferentes frecuencias y los coeficientes de Fourier miden la contribucin de las sinusoides a esas frecuencias. De manera semejante, la transformada wavelet representa a una seal como una suma de wavelets en diferentes posiciones y escalas. Los coeficientes de las wavelets esencialmente cuantifican la intensidad de la contribucin de las wavelets en esas posiciones y escalas. Un buen ejemplo ilustrativo es la seal diente de sierra, que crece linealmente con el tiempo y luego decae bruscamente, para seguir luego peridicamente este comportamiento. Esta forma de onda simple puede ser representada perfectamente por medio de la suma de diferentes wavelets (figura 16). Las wavelets de escala gruesa, cuya duracin es aproximadamente la misma de la rampa, representan la parte suave, creciente de la rampa, mientras que las wavelets de escala fina capturan el cambio brusco en el medio. Esta seal diente de sierra, muestrada 256 veces por segundo, se puede representar fielmente con apenas 16 wavelets, mientras que con Fourier se necesitaran muchos ms componentes (unos 256), debido a la dificultad de representar discontinuidades por medio de sinusoides de distintas frecuencias. La capacidad de las wavelets para representar eficientemente seales e imgenes con discontinuidades, es la clave para su utilidad en aplicaciones tales como compresin de datos y filtrado del ruido. Adems en muchos contextos la transformada wavelet es fcil de interpretar. Singularidades y bordes, que son difciles de discernir a partir de la tranformada de Fourier, se destacan en la transformada wavelet, de manera que resulta ms fcil identificar caractersticas importantes localizadas en una imagen. El anlisis de wavelet actualmente es conveniente, computacionalmente hablando, por mrito de un algoritmo

conocido como algoritmo rpido de la pirmide. El algoritmo es usado para evaluar la transformada wavelet (en otras palabras, para descomponer la seal en componentes wavelets). Este algoritmo tiene dos caras, para as decirlo. El algoritmo frontal sirve para computar la transformada wavelet. El algoritmo posterior computa la transformada inversa y permite reconstruir la seal original a partir de los diferentes componentes wavelets. El algoritmo frontal usa una serie de filtros pasabajos y pasaaltos para as descomponer la seal en componentes de baja y alta frecuencias. Tambin combina estos filtros con operaciones de submuestreo (down-sampling), que consisten en eliminar una de cada dos muestras en cada operacin, reduciendo as los datos cada vez ms. Esto explica la velocidad del algoritmo, debido a que el submuestreo reduce los cmputos en cada iteracin en forma geomtrica y despus de j iteraciones, el nmero de muestreos que es procesado se reduce por 2j. El procedimiento tambin da al algoritmo de pirmide su nombre, ya que las estructuras intermedias de datos producidas durante el algoritmo, si son apiladas, produciran una torre de arreglos lineales cada vez ms angostos, en forma de pirmide. De hecho, para computar la transformada wavelet de una seal de N muestras, los ciclos necesarios por parte del CPU son NC, donde C es una constante, que depende de las wavelets

Pag. 1-41 escogidas. Si C es pequeo, entonces el cmputo de la transformada wavelet requiere casi el mismo esfuerzo que tareas triviales tal como copiar o escalar una seal. De manera que computar la transformada wavelet es mucho ms rpido que computar muchas otras transformadas convencionales, que tpicamente demandan n2 ciclos de CPU. Ella puede inclusive ser ms rpida que la propia transformada rpida de Fourier (FFT) que requiere Nlog N ciclos. La dispersin de datos que se logra con los wavelets permite utilizar eficientemente algoritmos para la compresin de imgenes. La imagen primero es transformada con las wavelets y luego los coeficientes son codificados, en forma parecida a como se hace con la DCT en JPEG. Pero la matriz de coeficientes que se logra con las wavelets es generalmente ms dispersa que la matriz en la DCT, en el sentido que hay muchos coeficientes nulos, por lo que se puede lograr mejor compresin. La transformada wavelet es simplemente un extremo de una amplia gama de transformadas incluyen a la transformada de Fourier en el otro extremo. En algn lugar en medio estn los paquetes wavelet y los paquetes coseno (figura 17), los cuales son la base para nuevas transformadas.
P P

Pag. 1-42

Fig. 16. Descomposicin de una onda diente de sierra en varias wavelets

Ellos se encuentran en un punto intermedio entre las wavelets y las sinusoides: poseen una posicin y duracin en el tiempo (como las wavelets), as como tambin una frecuencia de oscilacin (como las sinusoides). Por esta razn son formas de onda en el dominio tiempo-frecuencia. Al igual que con las wavelets y las sinusoides, una seal puede representarse unvocamente como una suma de paquetes wavelet o de paquetes coseno. Ambos tipos de paquetes son tiles en los mismos tipos de problemas de las wavelets, incluyendo la compresin y la eliminacin de ruido. Pero ellos

pueden ser superiores para representar seales localmente oscilatorias (digamos msica digitalizada) e imgenes localmente oscilatorias (digamos texturas digitalizadas). Tales seales frecuentemente tienen una representacin mucho ms dispersa en el dominio tiempo-frecuencia que en el dominio de las wavelets o el dominio de Fourier (frecuencia), ya que las wavelets no son altamente oscilatorias y la transformada de Fourier no est localizada en un segmento especfico de la duracin de la seal.

Pag. 1-43

Fig. 17. Paquetes wavelets y paquetes coseno

Otra tcnica de compresin con prdidas bastante sofisticada se basa en los fractales. Como ejemplo, el FIF (Fractal Image Format), convierte imgenes en una serie de formas fractales superpuestas que pueden ser representadas y almacenadas en forma matemtica trminos de semejanzas geomtricas locales. La geometra fractal puede mantener la continuidad de la imagen a niveles microscpicos. La descompresin no depende de la resolucin del sistema de video, as que las imgenes capturadas y comprimidas a partir de un sistema de baja resolucin (por ejemplo VGA) pueden ser descomprimidas para ocupar una pantalla de mayor resolucin (como SuperVGA) sin introducir granulosidad. De todas las imgenes distintas que una computadora puede crear, pocas pueden competir con los fractales en cuanto a belleza y a capacidad, para as inspirar asombro en el observador. Una imagen fractal posee una complejidad infinita. No importa cunto la amplifique, los detalles siguen apareciendo. Los ejemplos de objetos de fractales abundan en la naturaleza: Una costa que zigzaguea de forma interminable, la superficie infinitamente ondulada de una cordillera. El propio universo tiene caractersticas de fractales. Si se mira de cerca, se pueden descubrir los tomos que lo componen e incluso la materia subatmica de la que se componen los propios tomos.

El fractal ms famoso es uno generado por la computadora: El juego de fractales de Mandelbrot, para honrar a Benoit Mandelbrot, el matemtico que invent la palabra fractal en 1975. Mandelbrot descubri que si se diagraman ciertos puntos en el plano complejo, se puede generar una imagen abstracta. El plano complejo es como un grfico ordinario, X vs. Y, excepto que contiene tanto nmeros reales como imaginarios, siendo estos ltimos los nmeros que contienen el trmino i (el cual representa la raz cuadrada de 1). Los nmeros reales se refieren al eje X y los imaginarios al eje Y. La ecuacin de Mandelbrot toma un punto en el plano complejo y devuelve otro punto. Se aplica de forma iterativa o repetida: se usa la salida de cada punto de coordenadas para la prxima entrada en la ecuacin, y as sucesivamente. Un tipo de fractal potencialmente til es el basado en el Sistema de Funcin Iterada (IFS). La tcnica de los fractales IFS, inventados por Michael Barnsley y sus colegas en el Georgia Tech, EE.UU., explota las autosimilitudes que existen en una imagen, modelando a la misma como varios cuadros ms pequeos de s misma. Unas ecuaciones especiales, conocidas como mapas de afinidad, permiten traducir, rotar y escalar regiones de la imagen. Por lo tanto, estas regiones sirven como los cimientos para el resto de la imagen. Los fractales IFS tienen una aplicacin real y til: Pueden

usarse para comprimir imgenes grandes de mapas de bits a slo fracciones de sus tamaos normales. La compresin IFS (llamada frecuentemente compresin fractal de imagen), es una tcnica con prdidas, lo que significa que la imagen reconstruida no ser exactamente igual a la imagen original. El principio en que se basa la compresin de imagen IFS es reducir una matriz de pixeles a unos pocos nmeros que representan las transformaciones de afinidad. La parte difcil es, por supuesto, adivinar cules son los nmeros. Michael Barnsley y Alan Sloan descubrieron una manera de hacerlo que trabaja con cualquier imagen de mapa de bits, incluso una que no exhiba una autosimilitud obvia . Con el mtodo Barnsley-Sloan, se empieza por dividir una imagen en segmentos irregularmente formados usando tcnicas estndares de procesamiento de imagen, como la deteccin de lmites y anlisis de variacin de textura. A continuacin se computa una serie de transformaciones que definen la imagen como una unin de estos segmentos y se introducen las transformaciones como cdigos IFS. Un proceso iterativo se encarga despus de reconstruir la imagen con una gran precisin. Algunas imgenes codificadas pueden usar 100 o ms mapas de afinidad. Se ha logrado as alcanzar razones de compresin mayores de 10.000 a 1, que representa mucho ms del 50 a 1 que se logra tpicamente con otros mtodos de compresin con prdidas, por ejemplo JPEG. La compaa de Michael Barnsley, Iterated Systems, vende una biblioteca de funciones que los programadores pueden usar para comprimir y expandir imgenes usando el mtodo IFS. La enciclopedia multimedia Encarta de Microsoft utiliza esta biblioteca para comprimir las imgenes almacenadas en CD-ROM, y tambin lo hacen algunos otros fabricantes. No se han revelado todos los detalles del mtodo, pero el hecho que Microsoft use la biblioteca de compresin de Barnsley es una buena evidencia de que trabaja y de que es aplicable a imgenes de todo tipo. La desventaja de la compresin fractal es que usa muchos clculos, mucho ms que JPEG. La expansin es rpida, pero tambin requiere ms tiempo que la expansin de JPEG. Si no hay hardware especializado para la compresin y la expansin, el mtodo IFS es conveniente para las imgenes estticas pero slo til de forma marginal para video en movimiento. Para tratar de entender mejor la compresin fractal de imgenes, se puede utilizar como ejemplo una de las imgenes IFS ms llamativa y famosa, la de un helecho, en la que cada rama es una versin en miniatura del propio helecho. Aunque est generado por una computadora usando mapas de afinidad, el helecho se parece bastante al de verdad. De hecho, se ha sugerido que la naturaleza usa algo parecido al fractal IFS para codificar la construccin gentica de las plantas y los rboles. El corazn del helecho IFS es el mapa de afinidad definido por las siguientes ecuaciones: X = aX + bY + e Y = cX + dY + f Aqu X e Y son las coordenadas de una entrada de punto a la ecuacin, X' e Y' son las coordenadas de una salida de punto de la ecuacin, mientras que a, b, c, d, e, f son los coeficientes de la ecuacin. Lo que estas ecuaciones representan es una

Pag. 1-44 manera de permitirle a la computadora generar en forma iterativa las coordenadas de un punto nuevo, (X', Y'), a partir de las coordenadas de otro, (X, Y). El helecho IFS realmente no usa uno sino cuatro mapas de afinidad. Las ecuaciones de los cuatro mapas de afinidad son idnticas, excepto por los valores de a, b, c, d, e, f. Estos valores se muestran en la Tabla 16. A cada mapa de afinidad se le asigna tambin una probabilidad (entre 0 y 1) que cuantifica su importancia con relacin a los otros mapas; estas probabilidades tambin se enumeran en la tabla. Juntas, estas ecuaciones y probabilidades constituyen el cdigo de IFS para un helecho fractal.

Ecuacin 1 Ecuacin 2 Ecuacin 3 Ecuacin 4

a 0.00 0.85 0.20 -0.15

b 0.00 0.04 -0.26 0.28

c 0.00 -0.04 0.23 0.26

d 0.16 0.85 0.22 0.24

e 0.00 0.00 0.00 0.00

f 0.00 1.60 1.60 0.44

prob. 0.01 0.85 0.07 0.07

Tabla 16. Valores para generar un helecho fractal

Dado los parmetros para este cdigo IFS, generar una imagen de un helecho es algo simple. Primero se escogen valores iniciales para X e Y (0 y 0 sirven). Luego se insertan esos valores iniciales en cualquiera de los mapas de afinidad. El resultado de esta ecuacin es otro conjunto de valores de X e Y (esto es X' e Y') que se diagraman como un pixel en la pantalla. Si se hace esto varias miles de veces, usando cada vez los valores de salida de X e Y de la ltima iteracin como entrada para la prxima iteracin, se formar gradualmente en la pantalla la imagen de un helecho. Qu es lo que hacen las probabilidades? En varias miles de iteraciones, cada mapa de afinidad debe usarse un nmero de veces proporcional a su probabilidad asignada. En otras palabras, la ecuacin 1 debera usar el 1 por ciento del tiempo, la ecuacin 2 debera usar el 85 por ciento del tiempo, y las ecuaciones 3 y 4 deberan usar cada una el 7 por ciento del tiempo. Una ecuacin debera seleccionarse al azar en cada iteracin, pero como promedio, las probabilidades deberan controlar el nmero de veces que se selecciona cada ecuacin. El siguiente simple programa escrito en QBasic permite examinar el proceso.

SCREEN 12 CLS VIEW(0,0)-(639,479) WINDOW(-4,0)-(6,10) RANDOMIZE TIMER X=0 Y=0 WHILE INKEY$= r=RND IF (r <= .01) THEN a = 0: b = 0: c = 0: d = 0: e = 0: f = 0 ELSEIF r > .01 AND r <= .86 THEN a = .85: b = .04: c = -.04: d = .85: e = 0: f = 1.6 ELSEIF r > .86 AND r <= .93 THEN

a = .2: b = -.26: c = .23: d = .22: e = 0: f = 1.6 ELSE a = .15: b = .28: c = -.26: d = .24: e = 0: f = .44 ENDIF newX = (a*X) + (b*Y) + e newY = (c*X) + (d*Y) + f X = newX Y = newY PSET(X,Y),2 WEND SCREEN 0

Pag. 1-45 instruccin y a la instruccin siguiente (cambiando el primer ELSEIF a IF de modo que el resto del programa permanece sintcticamente correcto), el helecho pierde su tallo. Otros cambios producen resultados igualmente curiosos. De hecho, si se manipulan los nmeros de la forma correcta, se producen otras imgenes IFS. Para demostrarlo, se puede modificar el programa para que use los valores de la Tabla 17.

El programa usa un lazo WHILE: WEND para generar puntos repetidamente hasta que se pulse una tecla. Mientras ms tiempo se deje correr el programa, ms completa ser la imagen. Lo que comienza como unos puntos aparentemente al azar regados por la pantalla, crece para convertirse en una rplica de un helecho generado matemticamente. Hay un par de puntos que destacar. Primero, el programa usa la instruccin SCREEN 12 para cambiar al modo VGA de 640 por 480 pixels despus de que arranca. Por ello, se requiere un adaptador de video VGA o equivalente. Segundo, el programa define un puerto de vista (viewport) que comprende la. pantalla completa (VIEW (0, 0) (639, 479)). Y mapea a ese puerto de vista un sistema de coordenadas lgicas que va de 4 a 6 en la direccin de X y de 0 a 10 en la direccin Y. Los valores producidos por los mapas de afinidad estn generalmente dentro de esta gama, as que es fcil agrandar el helecho para que llene la pantalla. Se usa el generador de nmeros aleatorios RND para calcular un nuevo valor al azar cada vez que pasa por el lazo. Ese valor se usa para seleccionar uno de los cuatro conjuntos de coeficientes. Asumiendo que el generador de nmeros aleatorios produce una distribucin de nmeros al azar razonablemente pareja en miles de ciclos, con cada conjunto de coeficientes, cada mapa de afinidad se usar un porcentaje de veces que corresponde a su probabilidad asignada. Es difcil asignar una importancia fsica a los valores de los coeficientes en los mapas de afinidad, pero se puede aprender con algunos experimentos simples. Por ejemplo, cambiando los valores de b y c en la segunda ecuacin a 0,06 y -0,06, respectivamente, aumenta la curvatura del tallo del helecho y si los cambia a 0,02 y -0,02, reduce la curvatura. Tambin se puede aprender algo sobre el efecto que cualquiera de los mapas de afinidad tiene sobre el proceso de generacin del helecho, si baja su probabilidad a 0. Si se elimina la primera ecuacin, poniendo comentarios a la primera instruccin IF

a Ecuacin 1 0.05 Ecuacin 2 0.50 Ecuacin 3 0.50

b 0.00 0.00 0.00

c 0.00 0.00 0.00

d 0.50 0.50 0.50

e 0.00 1.00 0.50

f 0.00 0.00 0.50

prob. 0.33 0.33 0.34

Tabla 17. Valores para helecho modificado

El hecho que un programa tan trivial pueda producir imgenes tan sorprendentes se debe a la autosimilitud. Cada mapa de afinidad juega un papel importante al describir un objeto, si ste puede mejor describirse en trminos del propio objeto. Mediante una serie de traducciones, operaciones de escalas y rotaciones, los mapas transforman al ltimo conjunto de coordenadas de punto en las coordenadas de otro punto que yace en alguna parte del objeto. Si se aplican los mapas de afinidad varias veces al azar, la imagen resultante ilustrar al mismo objeto que el cdigo IFS describe. El helecho en la pantalla contiene millares de pixeles y si guarda la pantalla entera de 640x480 como un mapa de bits monocromtico sin comprimir se tendra un archivo grfico de 307.200 bits, esto es 38.400 bytes. Para guardarla en un modelo de fractal se necesita slo suficientes bytes para almacenar los cdigos IFS, los cuatro conjuntos de coeficientes y sus probabilidades. Asumiendo que cada nmero de punto flotante requiere 4 bytes de espacio de almacenaje (un valor tpico para los tipos de datos de punto flotantes con precisin simple), slo se necesitan 112 bytes para almacenar todo lo que requiere un programa IFS de expansin para volver a crear el helecho. Este es un factor de compresin de ms de 340 a 1. En el archivo FRACTAL.ZIP del disco 1 se puede encontrar el cdigo fuente del generador de helecho (HELECHO.BAS). Tambin se encuentra all el documento FRACTAL.TXT que trata sobre la historia de los fractales y Mandelbrot. Para experimentar y conocer ms, puede buscarse en Internet el programa FRACTINT, el cual es uno de los ms completos, y consultar algunas de las referencias.

1.12. Compresin de Grficos


Los PC y las estaciones de trabajo poseen cada vez mayor resolucin y densidad de colores, por lo que la compresin de grficos se ha vuelto una necesidad ms que un lujo. Un grfico de pantalla completa en un antiguo PC con monitor CGA posee 320x200 puntos (pixels) con 4 posibles colores, por lo que requiere 3202002 /8 = 16 kB para guardarlo como un archivo. En un moderno PC con monitor VGA de 640x480 pixels se requiere 153.6 kB con 16 colores y 307.2 KB con 256 colores. Aqu claramente se ve la conveniencia de un mtodo eficiente para la compresin de datos si se van a almacenar o transmitir muchos grficos. Con el uso cada vez ms intenso del World Wide Web en Internet, ha aumentado la demanda para la transferencia rpida de grficos e imgenes. A lo largo de los aos han ido apareciendo una gran cantidad de mtodos y formatos para comprimir y almacenar imgenes fijas generadas con programas de computacin para

dibujos, artes grficas y scanners. Basta mencionar el popular formato PCX usado por Paintbrush. La mayora de los formatos son sin prdidas, por lo cual la compresin que se logra no es muy impresionante. El Graphics Interchange Format (GIF) fue desarrollado en 1987 por CompuServe para poder disponer de un protocolo de trasferencia de imgenes a colores entre los usuarios de su red de informacin on-line. El algoritmo de compresin se basa en LZW, es muy eficiente e independiente el hardware. Un archivo GIF puede tener guardadas varias imgenes, que se pueden visualizar rpidamente. El Tag Image File Format (TIFF) fue desarrollado conjuntamente por Aldus y Microsoft para aplicaciones con scanners y artes grficas. TIFF permite varios esquemas de compresin y dispone de funciones para el control de la imagen. Hay varias clases de TIFF: para escalas de grises: el TIFF-G, para imgenes RGB: el TIFF-R, etc. En los aos recientes una disputa legal entre Unisys, que posee la patente sobre LZW y el resto de la industria del software, ha inclinado la balanza en favor de las tcnicas de compresin basadas en LZ77. Por ejemplo, el novedoso formato grfico Portable Network Graphics (PNG) ha sido promovido como un reemplazo para el formato GIF de Compuserve, el cual al basarse en LZW, requiere de licencia de uso. El formato PNG logra una compresin muy superior a cualquiera de los formatos grficos sin prdidas existentes y por tal razn fue escogido por el Prof. Vincenzo Mendillo para utilizarlo en su software educativo. Las especificaciones completas de PNG se encuentran en el documento RECPNG.TXT . Tambin se encuentra all una breve descripcin en PNGINTRO.TXT Todos los formatos anteriores son para grficos de mapa de bits sin prdidas. Tambin existen numerosos formatos para grficos vectoriales, donde se emplean frmulas matemticas para reconstruir la imagen original. Basta mencionar a EPS (Encapsulated Postscript), WMS (Windows Metafile Format), HPGL (Hewlett-Packard Graphics Language) y PICT (de Macintosh). Debido a la falta de espacio, no es posible aqu describir a todos los formatos grficos y el lector interesado puede hallar mayor informacin en el documento

Pag. 1-46 GRAPHFAQ.TXT. Uno de los mtodos ms antiguos y sencillos para comprimir imgenes es conocido como RLE (Running Length Encoding), que se puede traducir como codificacin de la longitud de la corrida. Con RLE una imagen en 2 tonos (blanco y negro, sin grises) se codifica como una secuencia de parejas de nmeros: el primero nmero representa pro ejemplo la longitud de la corrida de pixels blancos (es decir la cantidad de pixels blancos consecutivos), mientras que el segundo nmero representa la longitud de la corrida de pixels negros. As 7,3 representara 7 pixels blancos seguidos de 3 pixel negros. Existen numerosas variantes de RLE. Por ejemplo, el formato packbits usado en las computadoras Macintosh, usa un nmero positivo p para indicar que siguen p caracteres distintos (corrida dispareja) y un nmero negativo n, seguido del carcter K, para indicar que siguen -n caracteres K, todos 77iguales entre s (corrida pareja). As la secuencia 3ABC-5D4E se codificara como ABCDDDDDDEEEE. Ntese que aqu se usan caracteres (bytes), en vez de pixels (bits), lo que mejora la velocidad y adems permite fcilmente programar el algoritmo en un lenguaje de alto nivel. Un variante RLE algo ms avanzada es la siguiente: en una imagen con preponderancia de partes blancas, usando un cdigo binario de b = 4 dgitos para el blanco, 9 pixels blancos seguidos se codifican como 1001 (9 en binario) y con un cdigo de n = 3 para el negro, 6 pixel negros seguidos se codifican como 110 (6 en binario). Si hay ms de 16 pixels blancos seguidos, se aprovecha la combinacin 0000 como un cdigo especial para indicar que el prximo cdigo hay que sumarlo a 16: por ejemplo 17 se codifica como 000000001 (16 es simplemente 00000000); de forma anloga se procede con respecto a los pixels negros. Los valores ptimos de b y n dependen en general de la estadstica de los pixels blancos y negros. A continuacin se muestra una secuencia original (donde 0 corresponde al pixel blanco y 1 al pixel negro) y su codificacin:

secuencia original: secuencia codificada:

000000 0110

1111 100

000000000000 1100

11111111 000

1 010

000 0011

RLE es posiblemente el formato grfico de ms pobre compresin entre los numerosos formatos que existen actualmente, pero a pesar de eso es muy utilizado en los archivos tipo BMP (bitmap) de Windows. Dada la gran difusin que tienen las aplicaciones bajo Windows, se describen a continuacin 2 formatos RLE que utiliza Windows: RLE8 (para imgenes de 8 bits/pixel, 256 colores) y RLE4 (para imgenes de 4 bits/pixel, 16 colores). RLE8 Este formato comprime los datos utilizando 2 modos:

codificado y absoluto. Ambos modos pueden ocurrir en cualquier lugar a lo largo del flujo de datos que representa el mapa de bits. El modo codificado se compone de 2 bytes: el primero especifica el nmero de pixels consecutivos que hay que dibujar utilizando el ndice de color especificado por el segundo byte. Por ejemplo, 09 1E (valores hexadecimales) significa que hay que dibujar 9 pixels seguidos, de color 1E. Si el primer byte es cero, se trata de un cdigo especial de control o escape cuyo significado depende del segundo byte, de acuerdo a la Tabla 18.

Pag. 1-47 Valor 0 1 2 Significado fin de lnea fin de datos delta respectivamente. RLE4 Este formato es parecido al anterior. En el modo codificado, el primer byte de la pareja contiene el nmero de pixel que hay que dibujar utilizando los ndices de color del segundo byte. Este segundo byte en realidad contiene 2 ndices de color: uno en primeros 4 bits y el otro en los restantes 4 bits. Como ejemplo, 09 1E significa dibujar 9 pixels con los siguientes colores respectivamente: 1 E 1 E 1 E 1 E 1. Si el primer byte es cero, significa que es fin de lnea, fin de datos o delta, al igual que en RL8. En el modo absoluto el primer byte es 0 y el segundo byte contiene el nmero de ndices de color que siguen. Los siguientes bytes contienen los ndices de color repartidos en los 4 bits superiores y los 4 bits superiores. As, 00 06 45 56 67 significa que hay que dibujar 6 pixels con los siguientes ndices de color: 4,5,5,6,6,7.

Tabla 18. Cdigos de control en RL8

En el caso de delta, los siguientes 2 bytes contienen el offset del siguiente pixel con respecto a la posicin actual. Como ejemplo, 00 02 05 01 significa mover la posicin 5 pixels a la derecha y un pixel abajo. Cuando el primer byte es cero y el segundo byte es un valor mayor de 2 y menor de 256 (0xFF hex), se trata del modo absoluto. En este modo el segundo byte representa el nmero de bytes que siguen a continuacin, cada uno de los cuales contiene el ndice de color de un pixel individual. Como ejemplo, 00 03 45 56 67, significa que deben dibujarse 3 pixels con los ndices de color 45, 56 y 67

1.13. Referencias
[1] Roy Huffman, Data Compression in Digital Systems. Chapman & Hall, 1997. [2] Khalid Sayood, Introduction to Data Compression. Morgan Kaufman Publishers, 1996. [3] Mark Nelson and Jean-Loup Gailly, The Data Compression Book. M&T Books. 1995. [4] Gilbert Held and Thomas Marshall, Data and Image Compression: Tools and Techniques. John Wiley & Sons, 1996. [5] James A. Storer (editor), Image and Text Compression. Kluwer Academic Publishers, 1992. [6] Ross Williams, Adaptive Data Compression. Kluwer Books, 1991. [7] James A. Storer, Data Compression, Methods and Theory. Computer Science Press, 1988. [8] Gilbert Held, Data Compression, Techniques and Applications, Hardware and Software Considerations. John Wiley & Sons, 1987. [9] Thomas J. Lynch, Data Compression Techniques and Applications. Lifetime Learning Publishers, 1985. [10] T. M. Cover and J. A. Thomas, Elements of Information Theory. John Wiley & Sons, 1991. [11] R.W. Hamming, Coding and Information Theory. Prentice-Hall, 1980. [12] K. M. Shanmugam, Digital and Analog Communication Systems. John Wiley and Sons, 1979. [13] Claude Shannon, "A mathematical theory of communication", Bell System Technical Journal, Vol. 27, July-October 1948, pp. 379-423, 623-656. [14] N. J. A. Sloane, A. D. Wyner: Claude Elwood Shannon, The Collected Papers. IEEE Press, 1993. [15] D. Slepian (ed.): Key Papers in the Development of Information Theory. IEEE Press, 1974. [16] E.R. Berlekamp (ed.): Key Papers in the Development of Coding Theory. IEEE Press, 1974. [17] David A. Huffman, "A method for the construction of minimum redundancy codes", Proceedings of the Institute of Radio Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. [18] "Profile: David A. Huffman", Scientific American, Sept. 1991, pp. 62-69. [19] E. S. Schwartz and B. Kallick, "Generating a canonical prefix encoding", Communications of the ACM, Volume 7, No. 3, March 1964, pp. 166-169. [20] D. S. Hirschberg and D. S. Lelewer, "Efficient decoding of prefix codes," Communications of the ACM, Volume 33, Number 4, April 1990, pp. 449-459. [21] G. Langdon, An introduction to arithmetic coding, IBM Journal on Research & Development, Vozlume 28, No. 2, March 1984, pp. 135-149 . [22] Ian Witten et al., Arithmetic coding for data compression, Communications of the ACM, Volume 30, Number 6, June 1987, pp. 520-540.

Pag. 1-48 [23] Jacob Ziv and Abraham Lempel, "A universal algorithm for sequential data compression", IEEE Transactions on Information Theory, Volume 23, No. 3, May 1977, pp. 337343. [24] Niklaus Wirth: Algorithms and Data Structures. PrenticeHall, 1986. [25] Jacob Ziv and Abraham Lempel: "Compression of individual sequences via variable-rate coding", IEEE Transactions on Information Theory, Volume 24, No. 5, September 1978, pp. 530-536. [26] Terry Welch, "A technique for high-performance data compression", IEEE Computer, Volume 17, Number 6, June 1984, pp. 8-19. [27] Mark Nelson, "LZW data compression", Dr. Dobbs Journal, Volume 14, Number 10, October 1989, pp. 29-37. [28] James A. Storer and Thomas. G. Szymanski, "Data compression via textual substitution", Communications of the ACM, Volume 29, June 1982, pp. 928-951. [29] Peter Deutsch and Jean-loup Gailly, "ZLIB compressed data format specification, Version 3.3", RFC 1950, Aladdin Enterprises, May 1996. Available at ftp://ds.internic.net/rfc/rfc1950.txt/ [30] Peter Deutsch, "DEFLATE compressed data format specification, Version 1.3", RFC 1951, Aladdin Enterprises, May 1996. Available at ftp://ds.internic.net/rfc/rfc1951.txt/
H H

[37] Stacy Humphrey: WAN data compression: getting the most out of your leased lines, Telecommunications, June 1994. [38] Salvatore Salamone: Router-based compression: bandwidth without choice, Data Communications, June 1993. [39] Kevin Tolly: Compression testing, Data Communications, April 1994. [40] Marathon 1K Data/Voice Network Server, MICOM Communications Corp., 1994. [41] Andrew Bruce et al., Wavelet analysis, IEEE Spectrum, October 1996, pp. 26-35. [42] Oliver Rioul and Martin Vetterli, Wavelets and Signal Processing, IEEE Signal Processing, October 1991. [43] Barbara Burke Hubbart, The World According to Wavelets. A.K. Peters, 1996. [44] Victor Wickerhauser, Adapted Wavelet Analysis: From Theory to Software. A. K. Peters, 1994. [45] Gilbert Strang and Truong Nguyen, Wavelets and Filter Banks. Wellesley-Cambridge, 1996. [46] Martin Vetterli and Jelena Kovacevic, Wavelets and Subband Coding. Prentice Hall, 1995. [47] Yves Meyer, Wavelets: Algorithms and Applications. Society of Industrial and Applied Mathematics, 1993. [48] Y. Fisher et al., Fractal Image Compression: Theory and Applications. Springer Verlag, 1995. [49] Michael Barnsley, Fractals Everywhere, Academic Press. 1993. [50] Benoit Mandelbrot, The Fractal Geometry of Nature. Freeman & Co., 1983. [51] Benoit Mandelbrot, Fractals: Form, Chance, and Dimension. Freeman & Co., 1977. [52] Heinz-Otto Peitgen and Ditmar Saupe, The Science of Fractal Images. Springer-Verlag, 1988. [53] Thimothy Wegner and Bert Tyler, Fractal Creations. Waite Group Press, 1993.

[31] GZip documentation ftp://prep.ai.mit.edu/pub/gnu/

and

sources,

available

at

[32] Info-Zip documentation and sources, available at ftp://ftp.cdrom.com/pub/infozip/ [33] Gua de Compresin de Datos para DOS 6.3. IBM Corp., 1994. [34] Steven E. Turner: How V.42bis compression cuts cost, Data Communications, December 1990. [35] Marc Luczac: Make data compression work to your advantage, Telecommunications, August 1994. [36] Stephen Saunders: Squeezing out savings with compression multiplexers, Data Communications, December 1992.

1.14. Lecturas Complementarias


INDICE
Shimon Even, "Four value-adding algorithms", IEEE Spectrum, May 1998. Ed Krol, "The packaging and naming of files, (in EFFs

Guide to Internet), Electronic Frontier Foundations, 1994. Sidney Kaplan, New compression methods, IEEE Aerospace and Electronic Systems Magazine, October 1992. Glenn Zorpette, Fractals: not just another picture, IEEE Spectrum, October 1988. D. E. Newland, An Introduction to Random Vibrations, Spectral and Wavelet Analysis, Longmans Ltd., 1993. Gerald Kaiser, "The Fast Haar Transform", IEEE Potentials, April/May 1998. Moc A. Cody, The Wavelet Packet Transform, Dr. Dobbs Journal, April 1994. William J. Dallas, A digital prescription for X-ray overload, IEEE Spectrum, April 1990. Steven E. Turner, How V.42bis compression cuts cost, Data Communications, December 1990. Clare Lees, V.42bis data compression, Telecommunications, April 1989. Ken Krechmer, "V.34 modems, Data Communications, January 1994. Ian Russell, Windows and high-speed modems, Data Communications, November 21, 1993. Glenn Farley, High-speed fax/modems: A new and powerful communications tool, Telecommunications, March 1993. Kenneth Camarro, Fax-modems demystified, Telecommunications, July 1993. Introduccin a la compresin de datos, RAD Data Communications LTD, 1993. Ken Miller, What vendors wont tell you about data compression, Data Communications, November 21, 1993. Marc Luczac, Make data compression work to your advantage, Telecommunications, August 1994. Stacy Humphrey,, WAN data compression: getting the most out of your leased lines, Teleommunications, June 1994. Kevin Tolly, Compression testing, Data Communications, April 1994. Salvatore Salamone, Router-based compression: bandwidth without choice, Data Communications, June 1993. Kevin Tolly, David Newman, Compression on remote Ethernet bridges, Data Communications, May 21, 1994.

Pag. 1-49 Compression for synchronous lines, Data Communications, July 1994.

Resumen Los complicados mtodos de compresin de video ahora en proceso de ser estandarizados estn diseados para reducir las necesidades de transmisin mediante la deteccin y codificacin de la redundancia de la imagen temporal y espacialmente, entre tramas. Los nuevos mtodos bajo investigacin que envuelven Fractales y Olas (Wavelets) pueden alcanzar una codificacin ms eficiente definiendo formatos espaciales y ecuaciones ms aplicables a la imagen especfica que la mayora de las transformadas de propsito general de los standards. Un mtodo aun ms nuevo de una base de datos entera de las caractersticas de la imagen e identifica y almacena el movimiento 3D en el campo de la imagen. La imagen puede ser reproducida a altas ratas de compresin en localidades remotas. Introduccin Sobre la dcada pasada las tecnologas de compresin de video han hecho de las telecomunicaciones de video con total movimiento e imgenes grficas, ms prcticas. Por 50 aos esta ha sido la meta pero el valor atribuido a la video conferencia con total movimiento nunca ha estado antes considerado por los altos costos. Ahora los costos han ido disminuyendo tanto en las lneas digitales de alta velocidad requeridas y los productos de compresin. Pero los costos siguen siendo altos y el video con movimiento es solamente costeable por las corporaciones con redes privadas. Los esfuerzos del Comit de Estndares por los productos de compresin de video para video conferencia, productos de presentacin de imgenes en movimiento y telecomunicaciones de fotografas son patrocinados por compaas grandes que esperan expandir el aun mercado pequeo. La estandarizacin es esperada para reducir los costos de I&D y de los productos y estimular la demanda del mercado. Mientras las transportadoras (carriers) comunes han solo comenzado a atraer el mercado estableciendo centros de conferencias en las ciudades para uso por tiempo compartido, son las compaas ms pequeas las que han estado vendiendo productos dedicados a la conferencia. Las corporaciones mayores con redes cableadas privadas y quienes tienen actividades para hacer uso regular de la video conferencia generalmente abarcan el mercado para los sistemas de video conferencia con compresin. Los estndares de compresin de video desarrollados para conferencia, productos de imgenes en movimiento, y telecomunicaciones de imgenes fotogrficas en estos ltimos aos han llegado a estar totalmente implementados. La necesidad de una tecnologa de compresin contina y es acrecentada por el concepto de los sistemas de computacin multimedia. Nuevas tecnologas para compresin de video han sido propuestas. Estos nuevos mtodos involucran el uso de caractersticas de imgenes prealmacenadas e incluyen las tecnologas de Fractales y Olas. Ellos emplean mtodos ms especficos para el tipo de imagen que el agrupamiento general de atributos de pixeles digitales involucrados en los mtodos de

compresin que evolucionaron en la dcada pasada. Otro mtodo que involucra transformadas de la forma (shape transforms) que carga con el concepto de data especifica de la imagen hasta lo ltimo es tambin discutido. Los nuevos productos de telecomunicaciones como los multiplexores locales de bajo costo que pueden operar sobre seales de data de video analgico y voz de modo que los requerimientos de lneas locales pueden ser simplificados, pueden descargar las complejas funciones de video compresin para facilidad del transportador de larga distancia. Esto podra liberar grandemente al usuario final de tener que tratar con complejos productos de telecomunicaciones de alta tecnologa y facilitar su uso y la reduccin de costos. Nuevos Mtodos Alternativos de Compresin de Video Hay nuevos mtodos alternativos de compresin de video que estn siendo propuestos frecuentemente que pueden ofrecer soluciones para aplicaciones de compresin de imgenes especificas que sin duda se desarrollaran a medida que la comunicacin de imgenes de video se vuelva ms popular. Los viejos mtodos investigados y desarrollados y ahora en proceso de se ser estandarizados son para imgenes aleatorias. Puesto que la data de la imagen es generalmente predecible, una descripcin especfica pueden ser formulada que caracteriza la imagen mejor que la transformada de propsito general del Coseno es usada en los mtodos estndar de compresin. Dos mtodos los cuales explotan el hecho de que cierta compresin de imagen puede ser mejorada es por el empleo de los temas de Fractales y Olas. Hasta los nuevos mtodos que involucran identificacin automtica de la imagen en tiempo real, localizacin y orientacin muestran promesas de una importante contribucin al campo de la compresin de imgenes. La Imagen de Formato Fractal basada en la matemticas de la geometra Fractal, esta siendo desarrollada para proporcionar compresin de imgenes. El contenido que es almacenado en el formato de imagen fractal es obtenido codificando una imagen en trminos de auto-similitudes (self-similarities) y reteniendo solamente estas relaciones geomtricas. Cada archivo de imagen de formato fractal representa un nmero ilimitado de concepciones digitales del contexto de la imagen original en todas las resoluciones, relaciones de aspecto y profundidades de pixeles. El tamao de archivo de un archivo de imagen en el formato de imagen fractal puede ser tan largo como el mapa de bits digital original o rdenes de magnitudes menor. Para una imagen fija, el tamao del archivo influencia el alcance al cual el archivo de formato de imagen fractal es una buena aproximacin de la imagen original del mapa de bits. El proceso de transformada fractal consiste del paso de codificacin que crea dos colecciones de subgrupos (subsets) de imagen. El primer subgrupo consiste de los Bloques de Dominio (Domain Blocks). El segundo subgrupo consiste en los Bloques de Rango (Range Blocks). Una vez que el subgrupo de Bloques de Rango y Dominio han sido establecidos, un Bloque de Rango y una transformacin afn es escogida para cada Bloque de Dominio. La escogencia es hecha de modo que la diferencia entre el mapa afn del Bloque de Rango y el del Bloque de Dominio sea mnima. La transformacin fractal promete mantener la continuidad

Pag. 1-50 de la imagen hasta niveles microscpicos y proporciona una tcnica mejorada para obtener imgenes comprimidas a la salida a una resolucin mayor que en la entrada. Esto puede ser deseable para imgenes estticas en aplicaciones comerciales pero un detrimento en otras coma la imaginera militar. La compresin de video con Olas envuelve la seleccin de un conjunto de ecuaciones que describen varias formas de olas que pueden caracterizar la data de la imagen. Para comprimir la data, el problema es encontrar las ecuaciones matemticas simples que describen la data en un punto en lugar de almacenar arreglos de data en cada bloque de grupos de pixeles. A medida que la imagen se hace ms detallada, cada pequeo segmento puede ser modelado por un numero mayor de ecuaciones que cuando son agrupadas y graficadas, reproducirn la imagen. La primera propuesta mostrando que las Olas (Wavelets) podra ser una herramienta prctica fue hecha en 1988 en AT&T. La compresin de data en fotografas, almacenando suficiente para reconstruir la imagen exacta con el mnimo de olas almacenadas demostr que se requerira de 1/40 de la cantidad requerida con otros mtodos como Fourier. La historia final del impacto de las olas tiene todava que ser escrita. Esta tcnica ha abierto la puerta para una nueva clase de anlisis. Cuando un terminal de video puede reconocer los objetos en una escena, muchos prospectos para la interfaz hombre mquina son posibles, entre ellos la compresin de video. Un sistema basado sobre, entre otras cosas, transformada de la forma puede almacenar objetos con caractersticas 3D en mltiples orientaciones y puede ser hecho en la ltima mquina de compresin de video. Cuando el objeto se mueve, la imagen en el extremo distante puede ser animada por la transmisin solamente de los vectores de posicin de la imagen. El mrito del sistema es definido solamente por la precisin del posicionamiento y la integridad del movimiento de la imagen animada. Este mtodo no es enteramente diferente que otras formas de metodologa de compresin puesto que en cada caso algunas formas de modelacin de la imagen toman lugar ya sea en la forma de olas, fractales, o hasta grupos o bloques de pixeles aproximados por la transformada digital del coseno. Este difiere primariamente en el propsito de la modelacin. El terminal entrenado para reconocer individuos y/o objetos tendra sus caractersticas registradas y almacenadas en una librera de imgenes. Debido a que la imagen cambia en la relacin de aspecto a medida que se mueve en tres dimensiones, la identificacin de la imagen se cree que ser facilitada si esta imagen es almacenada en 3D y la localizacin del objeto incluye informacin sobre el tamao al mismo tiempo que la imagen de video est siendo grabada. Esta funcin de localizacin puede ser llevada a cabo empleando un dispositivo sensor de rango (range sensing) junto con la cmara de video. El potencial para la compresin de video del futuro es aumentado si la compresin de video incluye el reconocimiento de objetos. La deteccin diferencial entre tramas de video para propsitos de extrapolacin de imgenes y economa en la transmisin de pixeles solo produce ventajas de compresin a corto plazo. Las operaciones de procesamiento de seales complejas a alta velocidad podran ser reemplazadas por mtodos de reconocimiento de objetos en tiempo real lo que es

intensivo en memoria e involucra operaciones de emparejamiento de imgenes, reconocimiento, almacenamiento y recuperacin. Con el tiempo, esta tecnologa podra proporcionar ms potencial y oportunidad que aquellas de tecnologa relativamente primitiva de los actuales estndares de compresin de fuerza bruta que estn hambrientos por el procesamiento de seales y dejan el verdadero conocimiento de la imagen sin cultivar. Nuevos Productos en Telecomunicaciones A medida que los costos de las telecomunicaciones bajan y la disponibilidad de la rata de datos se incrementa, la necesidad por productos de procesamiento de compresin de alto costo disminuye. Verdaderamente, hay algunos que creen que la disponibilidad de ratas de datos cada vez ms altas disponibles en las transportadoras (carriers) comunes continan bajando sus precios debido al crecimiento en capacidad de fibra ptica. Sin embargo, hay productos de telecomunicaciones que podran acrecentar el uso y la aplicacin de las telecomunicaciones con video en movimiento. Por ejemplo, hay una necesidad para una distribucin local de seales de video. Los conductores (drivers) de amplitud modulada en fibra ptica pueden ofrecer una gran eficiencia en las transmisiones de seales de video y voz en comunicaciones locales. Las seales analgicas son eficientemente multiplexadas en modo PAM y no causaran o sern sujetas a interferencias y por lo tanto pueden tener un rango dinmico muy grande. Este producto har innecesario para las redes privadas tener multiplexores en sus locales. Una simple lnea de fibra seria capaz de manejar video mltiple y miles de senales de voz y datos con un mnimo de electrnica. Las redes privadas frecuentemente colocadas sobre locales del cliente podran ser desplazadas a los dominios de transportadoras comunes. Esto liberara a la corporacin con la red privada de las costosamente ineficientes responsabilidades de la gerencia de telecomunicaciones. Los productos de distribucin analgica sobre fibra ptica estn ahora en desarrollo en Empire Telecom. Los productos originales operarn sobre el formato de video analgico NTSC. Este formato NTSC fue desarrollado a travs de los aos para una compresin optima del ancho de banda del video en la configuracin analgica y podra tambin ser aplicable en la configuracin de multiplexado PAM sobre fibra ptica. Otros productos requeridos debieran proporcionar interfaces avanzadas para la imagen de video en el terminal de computacin. La mayora de las conferencias involucran la necesidad de discutir informacin, documentacin e imgenes. Los sistemas de computacin y los terminales de procesamiento local que pueden ser asociados con la conferencia estn equipados para recibir, almacenar y presentar esta informacin haciendo de estas caractersticas un importante aditamento de la conferencia. La video conferencia no necesita solamente las imgenes de los conferencistas sino la habilidad de comunicar y controlar la presentacin de datos o imgenes de informacin que son el tpico fundamental de la conferencia. A medida que la comunicacin de video se desarrolla en el campo de la computacin hay mltiples nuevos productos que sern creados. Por ejemplo, la nueva alta rata de datos, redes de mensajes de rea ancha y local, necesitaran una interfaz para la operacin de video en movimiento. Productos ms simples

Pag. 1-51 tambin sern necesitados como son, correctores de base de tiempo para proporcionar video conferencia distribuida e interfaces de video para terminales de computacin. Referencias [1] Alan Sloan, The Fractal Image Format and JPEG, Electronic Imaging International Proceedings, 1991. [2] Jeffrey Freedman, Video Compression With Objet Recognition and Animation, Proceedings NTC, 1992.

Por ms de 25 aos, los satlites y aviones de reconocimiento de los EE.UU. han venido tomando miles de fotografas diarias. Debido a su potencial valor para inteligencia, la mayora de las fotos deben ser salvadas. La pregunta es: Donde?. Aun si las fotos fueran convertidas a imgenes de video de 1024 por 1042 elementos de pintura (pixeles), solo considerar unos cuantos aos de imagen se convertira en varios trillones de bytes de datos -- una cantidad muy cara de almacenar. Mientras tanto, estrategas militares confrontan el opuesto pero igualmente desanimante problema. Alcanzar la efectividad de varios esquemas de comando y control, ellos deben simular batallas precisamente -- una extremadamente difcil propuesta debido a la catica y largamente incalculable naturaleza de un combate militar real. Para solucionar ambos problemas, los investigadores se han tornado a una herramienta inverosmil: una clase de figuras geomtricas llamadas fractales. Naturaleza de modelacin Una caracterstica distintiva de la mayora de los fractales es la auto-similitud(self-similarity): cuando son magnificados, una pequea porcin de la figura reconstituye una parte mayor, ya sea exactamente o muy cercanamente. Esta caracterstica, tambin llamada invarianza de escala, fue descubierta en una amplia variedad de fenmenos naturales y hechos por el hombre por Benoit Mandelbrot en IBM Corps Thomas J. Watson Research Laboratory en Yorktown Heights, N. Y. Por ejemplo, una costa exhibe la misma variedad de ondulaciones, serpentineos, curvas torcidas aleatorias cuando es vista desde altitudes bastante diferentes. A 30, 20, 10 y 5 kilmetros, gruesamente las mismas proporciones de grandes, medianas y pequeas ensenadas y pennsulas son visibles. En otras palabras, relativo a la altitud, la forma general de la costa parece ser invariante. Este hecho aparentemente trivial fue el empujn de una publicacin de 1967 por Mandelbrot, cuan larga es la costa de Britania?, que lanz a la geometra fractal sobre su camino para ser el activo, altamente publicitado campo que es hoy. Mandelbrot, seguido por Richard Voss, tambin de IBM, mostraron que fractales aleatorios computo-generados proporcionaban imgenes dramticamente realsticas de nubes, arboles, continentes, y hasta planetas. En corto plazo, Lucasfilm Ltd. en San Rafael, Calif., La Universidad de Toronto, y otras instituciones se incorporaron al trabajo. Hoy en da, el uso de fractales para modelar la imaginera natural es una prctica global, con reportes de avances viniendo desde Universite Louis Pasteur de Francia, la Universidad de Utrecht

en Holanda, y la Universidad de Regina en Saskatchewan, Canad. Debido a que las imgenes computo-generadas de fractales tienen patrones similares sobre muchas escalas diferentes, relativamente poco cdigo es todo lo que es normalmente requerido para crearlas. Una vez escritas para producir el detalle sobre una escala, mucho del mismo software puede ser rehusado en un lazo para repetir la imagen sobre escalas sucesivamente mayores (o menores). As es como una remarcadamente intrincada imagen florece de una pequea, simple pieza de software. Esta propiedad de las imgenes fractales computogeneradas intrig a Michael F. Barnsley, un profesor de matemticas del Instituto de Tecnologa de Georgia en Atlanta. Al principio de los ochenta, Barnsley comenz tratando de usarlas para comprimir la data requerida para recrear una imagen. Al momento en que la mayora de los trabajos en fractales se enfocaban en producir imgenes complejas y realsticas de programas de computacin bastante compactos, Barnsley estaba intentando lo contrario. Comenzando con una imagen compleja, el estaba buscando un conjunto de fractales que produciran la imagen, o al menos una copia cercana de ella. Los relativamente cortos segmentos de cdigo que describan ese conjunto de fractales, el razonaba, podran entonces reemplazar el considerable trozo de data de pixeles requerida para recrear la imagen original. Temprano en 1984 Barnsley, Stephen Demko, y otros matemticos del Georgia Tech mostraron que mediante el anlisis de varias formas dentro de una escena, ellos podran encontrar los algoritmos necesarios para reducir la escena a un conjunto de fractales. El avance sensacional de oficiales interesados de la Agencia de Investigacin de Proyectos Avanzados de Defensa (Darpa) en Arlington, Va., quienes necesitaban una mejor compresin de imagen para todo desde almacenamiento de fotos de reconocimiento digital ms compactamente, hasta el acortamiento del tiempo requerido para reconocer un objeto en las fotos o para transmitirlas a un puesto de comando en el campo de batalla. Con $580 000 de Darpa y otros $200 000 de Georgia Tech, Barnsley, unido a su colega Alan D. Sloan, comenzaron convirtiendo la idea en un sistema practico. El trabajo condujo a un sistema demostrado a Darpa en 1987. El sistema, operado por un usuario entrenado, tom cerca de 100 horas para comprimir una imagen de 780 por 1024 pixeles, pero tambin, dijo Barnsley, alcanzo relaciones de compresin mayores de 1000 a 1. Barnsley y Sloan entonces abandonaron Georgia Tech para comenzar una compaa llamada Sistemas Iterados Inc. para desarrollar y mercadear su descubrimiento. Su compaa localizada en Atlanta es llamada despus de sistemas de funciones iteradas, una rama de las matemticas introducida en Georgia Tech y fundamental para el mtodo de compresin de Barnsley y Sloan. Con una imagen presente y asistido por un software de procesamiento de imagen, un usuario selecciona partes de la imagen para ser retratadas por fractales. La tarea requiere de alguna habilidad y familiaridad con los trabajos del sistema, aunque un grupo en Georgia Tech esta ahora intentando automatizar el procedimiento. Una imagen de la lluvia cayendo sobre una costa, por ejemplo, puede ser descompuesta en lluvia, rocas en el agua cercanas a

Pag. 1-52 la orilla, espuma en el agua cerca de las rocas, el agua en si misma, aves en el cielo, nubes, el cielo en si mismo, un pedazo de playa, y alguna hierba cerca de la playa. La mayora de las imgenes, dice Barnsley, podran cada una tener que ser subdivididas entre 10 y 200 de estas subimgenes. Un algoritmo divisado por Barnsley y Sloan entonces cuadra cada una de las subimgenes con un cdigo que representa una imagen fractal cercana en apariencia a la subimgen. El algoritmo busca una imagen fractal parecida empleando una escala llamada Mtrica Hausdorff, que mide cuan similar son dos imgenes en trminos de sus caractersticas espectrales y espaciales. Los cdigos que producen las imgenes fractales son llamados cdigos de sistemas de funciones iteradas (IFS). Ellos pueden ser usados para recrear la imagen original, y son almacenados en lugar de la informacin de pixeles que constituan la imagen original. Los cdigos IFS en cambio consisten de series de operaciones grficas ordinarias de computador llamadas transformaciones afines (affine transformations). Operando sobre un segmento de imagen en una espacio bidimensional, las transformaciones afines trasladan, rotan, y escalan la imagen, cambiando en efecto su localizacin, orientacin, y tamao en el plano. Las transformaciones son las herramientas usadas para explotar la redundancia fractal de la escena mayor. Por ejemplo, para una fotografa de una rama de un rbol mostrando muchas hojas, las transformaciones afines se las arreglaran para encoger y reorientar una imagen de una hoja hasta producir un numero de imgenes pequeas de hojas. Entonces, por medio de las transformaciones, varias de estas hojas pequeas sern agrupadas, solapndose unas con otras en una suerte de collage, para formar imgenes de la hoja original y del cualquier otra de las hojas en las escena tambin. Por lo tanto un conjunto relativamente pequeo de simples bloques de construccin fractal da origen a la ms compleja variedad de imgenes de hojas en la escena original. Cuando las transformaciones afines apropiadas son descubiertas, a todas les ser asignado un nmero, o probabilidad, que indica cuanto tiempo el procesador gastar reproduciendo una subimgen particular representada por un grupo particular de transformaciones. Las probabilidades de todas las transformaciones de una escena dada deben ser sumadas hasta 1. Una vez que las transformaciones y sus probabilidades asociadas son obtenidas, la escena es fcilmente recreada. Primero, empleando la probabilidad para una transformacin particular, el computador genera un punto aleatorio en el espacio bidimensional. Entonces el computador ejecuta la transformacin asociada sobre el punto, creando un nuevo punto, que es graficado. El procedimiento es repetido una y otra vez, varias decenas de miles de veces, y eventualmente la imagen original comienza a tomar forma. Si las probabilidades estn correctamente ajustadas a las transformaciones, la imagen total aparece en una forma balanceada; de otra forma diferentes subimgenes toman forma a velocidades diferentes, debido a que la probabilidad indica cuanto tiempo el computador gasta sobre una subimgen en relacin a las otras. El notable hecho de que un conjunto particular de transformaciones afines, cuando son aplicadas a un conjunto de

puntos aleatoriamente escogidos, siempre construir la misma imagen, independientemente del conjunto de puntos, fue probado matemticamente por el matemtico de Georgia Tech John Elton. Fidelidad variable En el enfoque de Sistemas Iterados, el grado al cual una imagen dada puede ser comprimida depende enteramente del grado de redundancia visual o geomtrica inherente en la escena. El punto no es si Barnsley ha producido algo nuevo -encapsulando complicados objetos con una pequea cantidad de informacin -- sino cuan amplia clase de objetos podr el ser capaz de encapsular en esa forma. Esto esta largamente sin respuesta, dijo un matemtico que se especializa en geometra fractal. Si usted mira diferentes especies de plantas, aquellas que son ms regulares en forma, en trminos de tener similitudes en diferentes partes del objeto, esas trabajaran bastante bien. Otras sern ms difciles. Alvy Ray Smith, vice presidente ejecutivo y cofundador de Pixar Inc., San Rafael, Calif., y un pionero en el uso de los fractales para modelar formas naturales, dijo: Las cosas muy regulares son los fractales ms fciles, pero hay cosas mucho ms complejas que son esencialmente fractales, y las cuales son ms interesantes en el largo plazo. Barnsley mismo prontamente admite que el grado de compresin que el puede alcanzar varia con el tipo de imagen y el grado de fidelidad demandado por el usuario. El establece, sin embargo, que para aplicaciones de foto-reconocimiento, esta caracterstica es deseable. Nubes o cubiertas de arboles en una imagen de un satlite espa no son de inters para un fotointerpretador, pero un agujero en la cubierta puede revelar parte de un sitio de construccin, y esta pequea seccin de la imagen debera tener extremadamente alta felicidad. En algunas reas, usted puede querer cada pixel, explic Barnsley. Usted puede tener esto. Es ms caro computacionalmente, y usted tendra que usar ms tiempo de compresin -- los algoritmos tendran que trabajar ms duro emparejando fractales con subimgenes, encontrando los mejores fractales posibles, en lugar de unos que ajusten bastante bien. No obstante, puesto que poco cdigo seria requerido para representar las reas oscuras, la compresin de la imagen total seria significativa. Aunque Sistemas Iterados clama haber alcanzado relaciones de compresin tan altas como 10 000 a 1, las imgenes recobradas de esta data as de comprimida semejan interpretaciones impresionistas de sus originales, mas que copias fotogrficas. Un observador no puede enfocarse (zoom in) sobre un detalle pequeo. Sloan, compaero de Barnsley en Sistemas Iterados, not que a mayor resolucin de la imagen, mayor puede ser su compresin. Una relacin de compresin de 10 000 a 1 es claramente no posible para una imagen de 256-por-256 pixeles (debido a que esto implicara la reproduccin de la imagen con solo 6 pixeles), pero puede ser razonable para imgenes de mayor resolucin, como las imgenes de alta-calidad de fotoreconocimiento, que tpicamente tienen 10 000 por 10 000 pixeles. En 1988 Sistemas Iterados espera anunciar un sistema de software para las estaciones de trabajo Sun 3/60, capaz de

Pag. 1-53 proporcionar compresin sin perdidas de imgenes en blanco y negro de 1024-por-1024 pixeles a relaciones entre 5 a 1 y 50 a 1. Separando orden y caos Apartando su posible rol comercial, los fractales pueden hacer ms por los planificadores militares del futuro que solo codificar y almacenar imgenes de foto-reconocimiento. Ellos pueden tambin ser una herramienta para analizar batallas, si son trabajados por estrategas como Gary Q. Coe es exitoso. Coe, un coronel que es jefe de la divisin de modelaje y anlisis del Grupo de Encuentro (Joint Staff) del Pentgono, est investigando el uso de fractales para modelar control y comando, e incluso predecir el resultado de batallas. Su trabajo es parte de una amplia tendencia hacia la modelacin de sistemas complejos, como sociedades, usando fractales. Control y comando es uno de los ms activos campos de la ciencia militar en los Estados Unidos, el receptor de al menos $20 millardos al ao en fondos de procura solamente, de acuerdo a las sumas de dinero del Departamento de Defensa. Pero descubrir cuando nuevas tcnicas y sistemas de comando y control son efectivas es extremadamente difcil, dice Coe, porque las caractersticas de comando y control envuelven complejidades que no pueden ser duplicadas, o incluso cercanamente aproximadas, por simulaciones corrientes de combate en un computador. Sobre cualquier campo de batalla a plena escala, el nmero de desconocimentos y variables -- que tan bien entrenadas estn las tropas, descansadas, equipadas, y escondidas, cuanta experiencia tienen, cuan capaces y confiables son sus armas, como es el terreno, como son las condiciones de luz y atmosfricas, y as sucesivamente -- pronto sobrepasan hasta el ms poderoso de los procesadores. Pero con fractales, Coe ve una posible forma de flanquear este problema. Coe nota que la auto-similitud de los fractales es bien apropiada para la modelacin de jerarquas militares, en los cuales los procesos en los cuales las decisiones son hechas y ejecutadas es ms o menos el mismo, si importar el nivel al cual ellas sucedan. Organizativamente hablando, los pelotones son muy similares a las compaas, que son muy similares a los batallones que son muy similares a las brigadas, y as sucesivamente. Solamente la escala es diferente. La evidencia, reforzada por estudios de las redes de comunicacin militares, es que "el flujo entero de informacin sobre el campo de batalla es fractal", dice Coe. "Como agregamos volumen a la informacin y el anlisis se vuelve ms complejo, podemos vernos forzados a utilizar nuestros conocimientos de fractales para cristalizar los hechos ms importantes y bases racionales para propsitos de decisin". Una batalla puede ser pensada como un tremendo sistema complejo no lineal, en que el caos y el orden luchan, desde e punto de vista de Coe. "En el pasado nosotros siempre tratamos de describir una batalla como lineal y determinstica. Pero esta es probablemente la manera equivocada de hacerlo. A un bajo nivel, todo lo que usted ve es el enemigo. Usted no esta interesado en patrones," dijo Coe. "En un nivel superior, un comandante est interesado en patrones. Hay ms orden. Por ello usted va a tener una suerte de frontera entre el orden y el caos tendiendo a ser fractal. Por lo tanto los fractales

ofrecen una clase de medida de donde el caos puede terminar y el control puede comenzar." Caos en el tope sera igual en efecto a una catstrofe, una situacin en la cual, por ejemplo, una compaa ha colapsado, explic Coe. Pero en esta clase de eventos, un programa basado en fractales podra ofrecer una forma de ayudar al comandante a recuperar el control (orden) sobre sus tropas. "Quizs usted tendra que escalar un nivel en la jerarqua. All podra haber una medida que usted podra tomar para prevenir un colapso completo -- para prevenir una catstrofe para una brigada o una divisin." Aunque Coe dice que es muy temprano para predecir como resultar su trabajo, una cosa es cierta. Una vez imaginativos, los fractales pronto sern aplicados a las crudas realidades de la guerra. Para mayor informacin El trabajo de Michael Barnsley en compresin de imgenes basadas en fractales ha sido descrito en un nmero de revistas, incluyendo Byte (Enero 1988) y Aviation Week and Space Technology (Abril 25, 1988). Tambien de inters es "Construction of Fractal Objets with Iterated Function Systems," por Stephen Demko, Laurie Hodges, y Bruce Naylor, publicado en las Actas (Proceedings) de la Conferencia de 1985 de la Siggraph, disponible para la Asociacin para la Maquinaria de Computacin en la Ciudad de Nueva York. Fractal's Form, Chance and Dimension (1977) y The Fractal Geometry of Nature (1982), ambos por Benoit B. Mandelbrot, son frecuentemente acreditados con el lanzamiento del movimiento fractal en la ciencia. Ambos estn disponibles en W. H. Freeman & Co.

Pag. 1-54 V.42bis como un estndar internacional ser difcil de pasar por alto tanto para usuarios como fabricantes de equipos. Ahora mismo, la compresin V.42bis esta disponible o en prueba beta sobre un par de docenas de modems V.22bis (2.4-kbit/s) y V.32 (9.6-kbit/s). Para la mayora de las aplicaciones, V.42bis comprime la data a una relacin mayor de 2:1, lo que significa que la rata a la cual la data es enviada de un modem a otro es efectivamente ms que doblada. Mayor capacidad (throughput) significa menores tiempos de conexin, lo que significa menores cuentas de telfono para usuarios de la red pblica. Otras tcnicas en tiempo-real, como las de Microcom Networking Protocol (MNP), comprime la data con aproximadamente la misma relacin que V.42bis. De hecho, el CCITT consider MNP Clase 5 y Clase 7, desarrollados por Micrcom Inc. (Norwood, Mass.), y CommPressor, de Adaptive Computer Technologies (Palo Alto, Calif.), en su evaluacin de tecnologas para el estndar V.42bis. Ultimadamente, se opt por basar el estndar sobre los algoritmos Lempel-Ziv, que fueroin desarrollados en 1977 y posteriormente modificados por British Telecommunications PLC. Despus de evaluar cada una de las mayores tcnicas de compresin en tiempo-real, el CCITT determin que el esquema BT Lempel-Ziv haca el ms eficiente uso de memoria y recursos del procesador. Tpicos Bsicos de Compresin En aos recientes, las tcnicas de compresin fuera de lnea han sido usadas para aumentar la capacidad de almacenamiento de los PCs. Esta data "precomprimida" puede entonces ser enviada de computador a computador via modem. Para los sistemas que no hacen uso de la compresin de datos para almacenamiento, la compresin en tiempo real es una alternativa ms atractiva para las transmisiones de datos. En los sitemas de compresin en tiempo real como MNP, CommPressor, y V.42bis, la compresin de datos y la descompresin son manejadas por el modem en lugar del procesador principal. Corriendo simultaneamente con los programas de compresin y descompresin estan los programas de deteccin de error y correcin de error que aseguran la integridad de la data en cada extremo de la lnea. Por supuesto, la compresin de datos en tiempo real puede trabajar solamente si tanto el modem trasmisor como receptor estn equipados con sistemas compatibles. Mientras que los algoritmos MNP, CommPressor, y el Lempel-Ziv todos hacen el trabajo, ellos son incompatibles. V.42bis es el intento del CCITT de eliminar la existencia de esquemas de compresin de datos incompatibles. Por qu LEMPEL-ZIV? El CCITT condujo una serie de evaluaciones tecnolgicas para desarrollar la recomendacin V.42bis. Despus de un sondeo preliminar de las tcnicas de cpmpresin de datos existentes, se enfoc sobre cuatro algoritmos: CommPressor, MNP Clase 5, MNP Clase 7, y la implementacin de los algoritmos LempelZiv de la British Telecom. La primera diferencia entre BT Lempel-Ziv y las otras tcnicas involucra su manejo del diccionario de compresin de datos. Este diccionario contiene las cadenas (strings) de caracteres recortadas substitutas que son usadas en lugar de

Steven E. Turner is the manager of technical staff/research at Universal Data Systems Inc. (Huntsville, Ala.), a division of Motorola Inc. He serves on TIA, CCITT, and IEEE standards bodies. ________________________________________

La recomendacin V.42bis, pasada temprano este ao por el Comit Consultivo Internacional de Telegrafa y Telefona, representa el comienzo de la era para la tecnologa de la compresin de datos. La recomendacin del CCITT de un simple estndar para compresin de datos en tiempo real est probablemente disipando mucha de la confusin causada por la existencia de diversas tecnologas concursantes, incompatibles. Esto ayuda tambin a establecer una clara direccin el futuro: V.42bis es suficientemente robusto no slo para servir como el estndar de compresin de datos para comunicaciones via modem sino tambin para funcionar sobre todos aquellos servicios digitales como ISDN que hacen los modems obsoletos. Por supuesto, la recomendacin del CCITT no es garanta de que el V.42bis eliminar otros esquemas de compresin de datos; la mayora de los usuarios no son amigos de desmantelar sistemas que trabajan solo para hacerlos compatibles con un estndar ordenado recientemente. Pero el surgimiento del

cadenas mayores en flujo de datos original. En MNP y CommPressor, los diccionarios son predefenidos y almacenados en la ROM del modem. Con BT Lempel-Ziv, sin embargo, los diccionarios pueden ser desarrollados dinmicamente y son almacenados en RAM. Diccionarios idnticos son construidos en los modems en ambos extremos del enlace a medida que la data es transmitida (ver "Cmo trabaja el diccionario V.42bis"). Mientras mayor sea el diccionario usado por un compresor, mayor es el incremento de potencial en procesamiento (throughput), puesto que ms valores ndices pueden ser creados y usados. Las tcnicas de compresin que usan un diccionario esttico, como MNP y CommPressor, estn limitadas por el tamao fijo del diccionario dado. A pesar de la aparente ventaja de un diccionario dinmico, sin embargo, el CCITT encontr que el desempeo en compresin de las tcnicas evaluadas es aproximadamente el mismo. Fueron el eficiente uso de la memoria y el poder de procesamiento las que dieron a BT Lempel-Ziv un filo decisivo en la evaluacin del CCITT. Con un diccionario de 2048palabras, MNP 7 requiere aproximadamente 50 por ciento ms que CommPressor y cerca del 30 por ciento ms que BT Lempel-Ziv. Y mientras CommPressor usa ligeramente menos memoria que BT Lempel-Ziv, requiere mucho ms tiempo de procesamiento que las alternativas -- ocho veces ms tiempo que BT Lempel-Ziv y al menos tres veces ms que MNP 7. Manejando Datos Aleatorios BT Lempel-Ziv tambin super la competencia en su habilidad para manejar la ocurrencia de data aleatoria o casi-aleatoria. Data perturbada (scrambled), encriptada, o precomprimida frecuentemente no puede ser comprimida debido que no tiene un patrn reconocible de repeticin. De hecho, cualquier intento de comprimir esta data es ms propenso a causar expansin de la data en lugar de compresin. BT Lempel-Ziv tiene un mecanismo que detecta entradas altamente aleatorias. Cuando esta data es detectada, el algoritmo de compresin se desconecta automticamente. El modulo de compresin monitorea el desempeo y automticamente enciende o apaga la compresin de acuerdo a la compresibilidad de la data medida. En las evaluaciones del CCITT, las implementaciones Lempel-Ziv produjeron una relacin de compresin 1:1 sobre data aleatoria. El algoritmo CommPressor sufri una muy pequea (2 por ciento) expansin debido a la data aleatoria; MNP 7, que no tiene caractersticas de correccin antiexpansin, tena un 25 por ciento de expansin para data aleatoria. La combinacin de una diccionario de compresin dinmico, uso eficiente de la memoria y el procesador, y deteccin automtica de la data aleatoria, guiaron al CCITT para escoger los algoritmos BT Lempel-Ziv como la base del estndar V.42bis. La naturaleza de la compresin de datos dicta que la tecnologa benefiica a algunas aplicaciones ms que a otras. Por ejemplo, el cdigo de lenguaje ensamblador y de un programa fuente contienen muchos comandos cortos que son frecuentemente repetidos. Como resultado, estas aplicaciones

Pag. 1-55 son ms propensas a beneficiarse del uso de la compresin de datos V.42bis. Hojas de clculo (spreadsheets), bases de datos, y archivos de datos financieros, los cuales son tpicamente altamente estructurados y bastante predecibles en trminos de longitud de caracteres y tipo de datos, tampbin muestran marcadas mejoras en procesamiento cuando son comprimidas, como lo hacen los archivos de texto e imgenes. En contraste, la data aleatoria o casi-aleatoria se comprime pobremente o del todo nada. Un ejemplo comn de data casialeatoria es un archivo precomprimido -- un archivo que ya ha sido corrido a travs de un algoritmo de compresin para conservar espacio de almacenamiento en el computador. La data encriptada es otro ejemplo de data casi-aleatoria que no responde bien a la compresin. La Espectro-extendido (Spread-expectrum) y otras tnicas de encriptacin pseudoruido-secuencia (pseudo-noise-sequence) pueden producir salidas de data que est aleatorizada al punto que no existen patrones discernibles. Problemas Restantes A pesar de las ventajas que pueden ser ganadas de V.42bis, dos problemas inoportunos continan frenando la amplia diseminacin de los productos V.42bis en el mercado. El primero, y menos serio, una dificultad es que varias compaas (ms notablemente British Telecom, IBM y Unisys) reclaman patentes de proteccin sobre partes del algoritmo de compresin contenido en V.42bis. Esto no parece ser un problema mayor, pues todas las compaas con reclamos identificados han acordado licenciar la tecnologa sobre una base justa y no discriminatoria. Los detalles de finalizacin de los acuerdos necesarios han causado algunas demoras en la introduccin de productos, sin embargo. La cuestim ms problemtica involucra la conexin entre modems y sus terminales o computadores anfitriones (host computers). La conexin modem-anfitrin (modem-host) tpicamente es hecha via las conexiones estndar EIA/TIA 232E o internacionalmente las conexiones CCITT V.28. Desafortunadamente, 232-E y V.28 estn definidas solo para velocidades de hasta 20 kbit/s. Con compresin de datos V.42bis, un modem V.32 9.6-kbit/s poda enviar data a ratas efectivas de procesamiento sobre el lmite de los 20 kbit/s, y con modems V.32bis, la probabilidad de romper este lmite de velocidad es an mayor. Para cumplir con las mayores ratas efectivas de procesamiento, el modem debe enviar los datos a su computador anfitrin a las ratas ms altas. El comit de estndares TIA TR-30.2 ha intentado especificar condiciones bajo las cuales transmisiones confiables a mayores velocidades podran llevarse a cabo sobre enlaces 232-E. Similarmente, el CCITT comenz revisando el V.28 en Septiembre de 1989 para reflejar la necesidad de enviar datos a ratas mayores de 20 kbit/s. En su reunin de Abril de 1990, el TIA TR-30.2 decidi no alterar el estndar EIA/TIA 232-E debido a la gran base instalada de cableado compatible con 232-E que podra no soportar las mayores ratas confiablemente. Los ajustes al V.28 estn continuando, pero el CCITT an no se ha establecido acerca de las especificaciones para ratas mayores de 20 kbit/s. An cuando las modificaciones del V.28 son completas, ellas sern consideradas como una solucin temporal, quedando

Pag. 1-56 pendiente una recomendadcin totalmente nueva que abarque ratas de transmisin de hasta 64 kit/s. Los observadores esperan que esta nueva recomendacin CCITT siga el estndar EIA/TIA 530, permitiendo el retiro gradual de V.35 y V.36, que han venido siendo usados para las interfaces de modems a 48-kbit/s sobre lneas rentadas. En los prximos aos, el uso del V.42 y del V.42bis debea ser ms difundido. Eventualmente, estos estndares sern considerados esenciales para una alta integridad de la transmisin de datos en modems. Adems, el V.42bis es capaz de proporcionar compresin de datos en conjunto con el CCITT V.120 ISDN Recomendacin de Adaptador de Terminal (Terminal Adapter Recommendation). Como resultado, V.42bis debera pasar de la tecnologa del modem analgico al mundo ISDN. V.42bis pasar a ser una parte integral de las comunicaciones de datos por un largo tiempo por venir. Como Trabaja el Diccionario V.42bis. La tarea bsica del algoritmo de compresin V.42bis es construir diccionarios de "palabras cdigo", las recurrentes cadenas de caracteres en la corriente de datos. Estas palabras cdigo son almacenadas en diccionarios idnticos en ambos modems el transmisor y el receptor; los diccionarios pueden ser accesados por un sistema de indexacin comn, sincronizado. La parte ms compleja del proceso es la comparacin (matching) de las cadenas (strings), o parsing, que el codificador debe ejecutar la compresin de datos. El parsing involucra una extensiva bsqueda en el diccionario. El proceso de parsing es simplificado empleando una estrucutura de la data llamada "rbol" que permite la bsqueda siguiendo un camino marcado en lugar de revolverse entre las entradas hasta que una correspondencia es encontrada. El proceso de bsqueda trabaja de la misma forma que una persona encuentra un nombre en una libreta telefnica. Encuentra la primera letra primero, luego la segunda letra, y as sucesivamente. Y, como las libretas telefnicas, informacin de entrada idntica mapeada a la estructura del rbol, produce idnticos nmeros de indexado.

Das könnte Ihnen auch gefallen