]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - doc/InformeTP3.lyx
Avanzo un poco más del informe
[z.facultad/75.06/jacu.git] / doc / InformeTP3.lyx
1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
2 \lyxformat 221
3 \textclass book
4 \language spanish
5 \inputencoding auto
6 \fontscheme palatino
7 \graphics default
8 \paperfontsize default
9 \spacing single 
10 \papersize a4paper
11 \paperpackage widemarginsa4
12 \use_geometry 0
13 \use_amsmath 0
14 \use_natbib 0
15 \use_numerical_citations 0
16 \paperorientation portrait
17 \secnumdepth 3
18 \tocdepth 3
19 \paragraph_separation indent
20 \defskip medskip
21 \quotes_language english
22 \quotes_times 2
23 \papercolumns 1
24 \papersides 1
25 \paperpagestyle default
26
27 \layout Title
28
29 Organización de Datos (75.06)
30 \newline 
31 Trabajo Práctico
32 \newline 
33 JACU
34 \layout Author
35
36
37 \series bold 
38 Grupo 11
39 \series default 
40
41 \newline 
42 Nicolás Dimov (77624)
43 \newline 
44 Alan Kennedy (78907)
45 \newline 
46 Leandro Lucarella (77891)
47 \newline 
48 Ricardo Markiewicz (78226)
49 \layout Date
50
51 Primera Entrega, 28 de Junio del 2004
52 \layout Standard
53
54
55 \begin_inset LatexCommand \tableofcontents{}
56
57 \end_inset 
58
59
60 \layout Chapter
61
62 Introducción al compresor
63 \layout Section
64
65 Método de compresión utilizado
66 \layout Standard
67
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: 
71 \series bold 
72 Block Sorting + Move to front + Huffman Estático.
73  
74 \layout Standard
75
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.
83 \layout Standard
84
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 
88 \series bold 
89 sección 
90 \begin_inset LatexCommand \ref{sec:Features-Especiales}
91
92 \end_inset 
93
94
95 \series default 
96 , los cuales a saberse son:
97 \layout Itemize
98
99 Persistencia del Modelo Orden-0 de Huffman (AKA: Huffman Canónico)
100 \layout Itemize
101
102 ZeroGroupping (Abreviación de ceros a la salida del MTF)
103 \layout Itemize
104
105 Word-Scaping (Optimización para textos detallada posteriormente)
106 \layout Section
107
108 Documentación
109 \layout Standard
110
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
113  del compresor.
114  Esta documentación se encuentra en el directorio 
115 \family typewriter 
116 doc/api/html
117 \family default 
118 .
119 \layout Section
120
121 Modo de uso
122 \layout Standard
123
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.
127 \layout Subsection
128
129 Invocación standard
130 \layout Paragraph
131
132
133 \series medium 
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.
138 \layout Paragraph
139
140
141 \series medium 
142 Sea 
143 \series default 
144 jacu
145 \series medium 
146  el archivo ejecutable correspondiente al compresor, tendremos la siguientes
147  formas básicas de invocación:
148 \layout Paragraph
149
150 Compresión: 
151 \series medium 
152 ./jacu -c [-t volsize] sourcefile targetfile
153 \newline 
154 Siendo 
155 \noun on 
156 sourcefile
157 \noun default 
158  el nombre del archivo a comprimir y 
159 \noun on 
160 targetfile
161 \noun default 
162  el nombre del archivo comprimido.
163 \layout Paragraph
164
165 Descompresión: 
166 \series medium 
167 ./jacu -d sourcefile targetfile
168 \newline 
169 Siendo 
170 \noun on 
171 sourcefile
172 \noun default 
173  el nombre del archivo a descomprimir y 
174 \noun on 
175 targetfile
176 \noun default 
177  el nombre del archivo descomprimido.
178 \layout Quote
179
180
181 \series bold 
182 Nota:
183 \series default 
184  El flag 
185 \series bold 
186 -t
187 \series default 
188  es un flag opcional que permite generar un archivo comprimido multivolumen,
189  donde 
190 \series bold 
191 volsize
192 \series default 
193  será el tamaño en kbytes de cada volúmen, excepto el último que podrá ser
194  menor.
195 \layout Subsection
196
197 Execution Flags
198 \begin_inset LatexCommand \label{sub:Execution-Flags}
199
200 \end_inset 
201
202
203 \layout Standard
204
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:
210 \layout List
211 \labelwidthstring 00.00.0000
212
213 -c Indica que se desea comprimir un archivo
214 \layout List
215 \labelwidthstring 00.00.0000
216
217 -d Indica que se desea descomprimir un archivo
218 \layout List
219 \labelwidthstring 00.00.0000
220
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
223  los volúmenes.
224 \layout List
225 \labelwidthstring 00.00.0000
226
227 -z Puede ser utilizado unicamente en una compresión y activa el feature
228  de ZeroGroupping
229 \layout List
230 \labelwidthstring 00.00.0000
231
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
234  de extensión .
235 \series bold 
236 ftb
237 \series default 
238 ), para que luego pueda ser reutilizado en otra compresión.
239 \layout List
240 \labelwidthstring 00.00.0000
241
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.
246 \layout Subsection
247
248 Ejemplos
249 \layout Standard
250
251 Damos a continuación unos breves ejemplos de invocación utilizando los flags
252  opcionales:
253 \layout Itemize
254
255 Compresión multivolumen (de 1024 kbytes each): 
256 \series bold 
257 ./jacu -c -t 1024 libro.txt libro.z
258 \layout Itemize
259
260 Compresión con ZeroGroupping: 
261 \series bold 
262 ./jacu -cz libro.txt libro.z
263 \layout Itemize
264
265 Compresión grabando modelo de huffman: 
266 \series bold 
267 ./jacu -cs libro.txt libro.z
268 \layout Itemize
269
270 Compresión con huffman canónico (carga de modelo): 
271 \series bold 
272 ./jacu -c libro.txt libro.z -m modelfile
273 \layout Chapter
274
275 Implementación
276 \layout Section
277
278 Especificaciones
279 \layout Subsection
280
281 Block Sorting
282 \layout Subsection
283
284 Move to Front
285 \layout Subsection
286
287 Huffman Estático
288 \layout Section
289
290 Features y Optimizaciones
291 \begin_inset LatexCommand \label{sec:Features-Especiales}
292
293 \end_inset 
294
295
296 \layout Standard
297
298 Como fue anticipado al inicio de este documento, nuestro compresor cuenta
299  con funcionalidad extra que permite en ciertos casos obtener mejores ratios
300  de compresión.
301  Pasamos a describir las mismas una por una, terminando por último con una
302  optimización específica para textos.
303 \layout Subsection
304
305 Huffman Canónico
306 \layout Standard
307
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.
315 \layout Standard
316
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.
322 \layout Standard
323
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 
327 \series bold 
328 sección 
329 \begin_inset LatexCommand \ref{sub:Execution-Flags}
330
331 \end_inset 
332
333
334 \series default 
335 .
336 \layout Subsection
337
338 Zero Groupping
339 \layout Standard
340
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.
345 \layout Standard
346
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.
354 \layout Standard
355
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.
359 \layout Subsection
360
361 Word Escaping
362 \layout Standard
363
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.
371 \layout Standard
372
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][
376 \backslash 
377 0x00] de [escapechar] [
378 \backslash 
379 0x03] es el hombre araña¨.
380 \layout Standard
381
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.
387 \layout Chapter
388
389 Benchmarks
390 \layout Section
391
392 Prueba Calgary
393 \layout Section
394
395 Archivos de Texto
396 \layout Section
397
398 Archivos Binarios
399 \the_end