1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
11 \paperpackage widemarginsa4
15 \use_numerical_citations 0
16 \paperorientation portrait
19 \paragraph_separation indent
21 \quotes_language english
25 \paperpagestyle default
29 Organización de Datos (75.06)
46 Leandro Lucarella (77891)
48 Ricardo Markiewicz (78226)
51 Primera Entrega, 28 de Junio del 2004
55 \begin_inset LatexCommand \tableofcontents{}
62 Introducción al compresor
65 Método de compresión utilizado
68 Dada la asignación de confeccionar un compresor de archivos de cualquier
69 índole, con alguna optimización particular para archivos de texto, hemos
70 optado por la implementación del esquema:
72 Block Sorting + Move to front + Huffman Estático.
76 Si bien un compresor estadístico final más robusto como el PPMC o bien un
77 Huffman Dinámico podrían producir ratios de compresión un tanto mejores,
78 a fines de resguardar la confección de un compresor estable y poseer tiempo
79 suficiente para realizar pruebas y optimizaciones, se optó por el Huffman
80 Estático, al cual se lo contrapuso con una implementación Third Party de
81 uno dinámico, y las diferencias fueron mínimas tanto en tiempo como en
82 compresión, descartando así la posibilidad de extender el estático al dinámico.
85 Además de la capacidad natural de todo compresor (esto es, de comprimir/descompr
86 imir), la implementación que describiremos a continuación cuenta con features
87 especiales que se verán detallados en la
90 \begin_inset LatexCommand \ref{sec:Features-Especiales}
96 , los cuales a saberse son:
99 Persistencia del Modelo Orden-0 de Huffman (AKA: Huffman Canónico)
102 ZeroGroupping (Abreviación de ceros a la salida del MTF)
105 Word-Scaping (Optimización para textos detallada posteriormente)
111 Para obtener una documentación de la API, se incluye en formato HTML en
112 el CD-ROM la documentación generada con Doxygen para los distintos componentes
114 Esta documentación se encuentra en el directorio
124 Antes de pasar a la descripción de la implementación de nuestro compresor,
125 detallaremos a continuación las instrucciones pertinentes para la correcta
126 y óptima utilización de nuestro compresor.
134 Como hemos ancitipado anteriormente, el compresor cuenta con features especiales
135 que pueden ser utilizados a través de flags en la invocación del programa.
136 Antes de pasar a su descripción, notamos la invocación general para comprimir
137 y descomprimir un archivo.
146 el archivo ejecutable correspondiente al compresor, tendremos la siguientes
147 formas básicas de invocación:
152 ./jacu -c [-t volsize] sourcefile targetfile
158 el nombre del archivo a comprimir y
162 el nombre del archivo comprimido.
167 ./jacu -d sourcefile targetfile
173 el nombre del archivo a descomprimir y
177 el nombre del archivo descomprimido.
188 es un flag opcional que permite generar un archivo comprimido multivolumen,
193 será el tamaño en kbytes de cada volúmen, excepto el último que podrá ser
198 \begin_inset LatexCommand \label{sub:Execution-Flags}
205 Ademas de los flags standards que hemos visto recién, nuestro compresor
206 cuenta con otra serie de ellos para la utilización de los features especiales
207 que veremos más adelante.
208 A fines de documentar la totalidad de los flags de ejecución, detallamos
209 los anteriores y los adicionales a continuación:
211 \labelwidthstring 00.00.0000
213 -c Indica que se desea comprimir un archivo
215 \labelwidthstring 00.00.0000
217 -d Indica que se desea descomprimir un archivo
219 \labelwidthstring 00.00.0000
221 -t Indica que se desea un archivo comprimido en multivolumenes.
222 Seguido a dicho flag se debe indicar el tamaño en kbytes que se desea para
225 \labelwidthstring 00.00.0000
227 -z Puede ser utilizado unicamente en una compresión y activa el feature
230 \labelwidthstring 00.00.0000
232 -s Puede ser utilizado unicamente en una compresión y graba el modelo de
233 orden-0 de huffman generado durante la compresión del archivo (en un archivo
238 ), para que luego pueda ser reutilizado en otra compresión.
240 \labelwidthstring 00.00.0000
242 -m Puede ser utilizado únicamente en una compresión y carga un modelo de
243 orden-0 de huffman para ser utilizado en la compresión del archivo especificado
244 , evitando el escaneado del archivo a comprimir.
245 Deberá ser sucedido por el nombre del archivo que posee el modelo.
251 Damos a continuación unos breves ejemplos de invocación utilizando los flags
255 Compresión multivolumen (de 1024 kbytes each):
257 ./jacu -c -t 1024 libro.txt libro.z
260 Compresión con ZeroGroupping:
262 ./jacu -cz libro.txt libro.z
265 Compresión grabando modelo de huffman:
267 ./jacu -cs libro.txt libro.z
270 Compresión con huffman canónico (carga de modelo):
272 ./jacu -c libro.txt libro.z -m modelfile
290 Features y Optimizaciones
291 \begin_inset LatexCommand \label{sec:Features-Especiales}
298 Como fue anticipado al inicio de este documento, nuestro compresor cuenta
299 con funcionalidad extra que permite en ciertos casos obtener mejores ratios
301 Pasamos a describir las mismas una por una, terminando por último con una
302 optimización específica para textos.
308 Dada la naturaleza del Huffman Estático que hemos implementado como el compresor
309 estadístico final de la cadena BS+MTF+Compresor, el mismo se vale de un
310 modelo estadístico de orden-0, el cual es obtenido realizando una pasada
311 inicial al archivo a comprimir, en la cual obtiene una tabla de frecuencias/pro
312 babilidades, y la cual es utilizada para generar el árbol de huffman, que
313 a su vez da órigen a una tabla de códigos prefijos que finalmente es utilizada
314 en el compresor, para encodear los símbolos o caractéres del archivo original.
317 Dicho esto, destacamos la extensión que hemos realizado a nuestro compresor
318 de Huffman para que pueda guardar y/o cargar un modelo estadístico de orden-0
319 y el usuario pueda por ejemplo utilizar para comprimir cualquier archivo
320 de texto, un modelo que él crea óptimo para la compresión de dichos archivos,
321 en vez de generar un modelo diferente para cada archivo que comprime.
324 Esta capacidad de un compresor de Huffman, se la conoce como Huffman Canónico,
325 y se encuentra presente en nuestro compresor.
326 Para saber más sobre su modo de uso, dirigirse a la
329 \begin_inset LatexCommand \ref{sub:Execution-Flags}
341 Siendo el producto del BlockSorting + Move to front, secuencias de valores
342 de 0 a 255, en donde gracias al Block Sorting que aumenta la localidad
343 de los bloques de datos del archivo original que se van procesando, se
344 tendrá una gran aparición de 0 (ceros) en la salida del Move to front.
347 Aprovechando este factor, hemos implementando este método de Zero Groupping,
348 en donde abreviaremos las series de ceros que se presenten en forma consecutiva
349 en la salida de un MTF, por un byte con valor hexa 00, y un factor de repetició
350 n a continuación del byte anterior (el mayor valor de repetición sera 255
351 para poder albergarlo en un byte).
352 De poseer una secuencia de ceros superior en longitud a 255, se abreviarán
353 esos 255, y luego se continuará con una nueva abreviación de los restantes.
356 En base a las pruebas realizadas, en la mayoría de los casos tanto en archivos
357 de texto como en binarios, se observa una leve mejora en los niveles de
358 compresión (bpb), utilizando esa opción en la invocación del compresor.
364 Esta optimización se ha realizado especificamente para mejorar la compresión
365 de archivos de texto.
366 La base de esta técnica es la previa confección de un diccionario de palabras
367 (en nuestro caso 255 palabras máximo), a través del cual aplicando un pre-proce
368 samiento al archivo a comprimir, reemplazamos las palabras de ese diccionario
369 que se encuentren en el archivo, por un código de escape sucedido por el
370 indice en el diccionario de la palabra que se abrevia.
373 Es decir, si tenemos el siguiente diccionario de 4 palabras: ¨padre¨, ¨él¨,
374 ¨nos¨, ¨superman¨, y poseemos el texto: ¨El padre de superman es el hombre
375 araña¨, luego del preprocesamiento tendremos: ¨El [escape char][
377 0x00] de [escapechar] [
379 0x03] es el hombre araña¨.
382 Para la confección de un buen diccionario, hemos desarollado una utilidad
383 que contabiliza las 255 palabras que más aparecen dentro de una fuente
384 especificada, y luego del análisis de varios textos en castellano de toda
385 índole (informáticos, novelas, noticias), se obtiene el diccionario que
386 será entregado con el software.