(Optimización para textos detallada posteriormente)
\layout Section
+Compilación
+\layout Standard
+
+Para compilar es necesario el programa
+\family typewriter
+make
+\family default
+ (además de un compilador, por supuesto, para desarrollar utilizamos
+\family typewriter
+gcc
+\family default
+ 3.3.x).
+ Sólo hay que correr en el directorio
+\family typewriter
+src/
+\family default
+:
+\layout LyX-Code
+
+make depend
+\layout LyX-Code
+
+make
+\layout Standard
+
+El
+\family typewriter
+make depend
+\family default
+ utiliza la herramienta
+\family typewriter
+makedepend
+\family default
+ que analiza los archivos fuentes
+\family typewriter
+.c
+\family default
+ y busca sus dependencias con archivos
+\family typewriter
+.h
+\family default
+ observando la directiva
+\family typewriter
+#include
+\family default
+.
+ De esta manera se simplifica el mantenimiento del
+\family typewriter
+Makefile
+\family default
+.
+\layout Standard
+
+El
+\family typewriter
+make
+\family default
+ se encarga de la compilación en sí.
+\layout Section
+
Modo de uso
\layout Standard
\labelwidthstring 00.00.0000
+\family typewriter
+-r
+\family default
+ Puede ser utilizado únicamente en una compresión y activa el característica
+ de
+\series bold
+Word Scaping
+\series default
+, que realizar un reemplazo de palabras frecuentes antes del BlockSorting.
+\layout List
+\labelwidthstring 00.00.0000
+
+
\family typewriter
-s
\family default
Especifica la calidad (nivel) de compresión.
Puede ser un valor entre 0 y 9, siendo 0 el menor nivel de compresión (más
rápido) y 9 el máximo (más lento).
- Por omisión se utiliza un nivel de compresión 5.
+ Por omisión se utiliza un nivel de compresión 5
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+Cada valor de este parámetro está asociado a un tamaño de página usado para
+ el algoritmo de
+\series bold
+Block Sorting
+\series default
+.
+ Los tamaños de página en bytes son, de 0 a 9 respectivamente: 1K, 2K, 4K,
+ 8K, 16K, 32K, 64K, 128K, 256K y 512K.
+\end_inset
+
+.
\layout Subsubsection*
Ejemplos
La técnica de Block Sorting
\begin_inset Foot
-collapsed false
+collapsed true
\layout Standard
Una posibilidad es utilizar un método de ordenamiento de bajo orden, como
el Quick Sort
\begin_inset Foot
-collapsed false
+collapsed true
\layout Standard
\begin_inset Foot
-collapsed false
+collapsed true
\layout Standard
\layout LyX-Code
-Salida: 00001011001000200020101000300010004
+Salida: 000010110010000200020101000300001000
\layout Standard
Un símbolo es codificado como el índice (ó posición) en la lista de símbolos
compresor.
Antes, es necesario comentar que el estado del compresor, se mantiene a
través de una estructura definida como
-\series bold
+\family typewriter
HUFF_STATE
-\series default
+\family default
, en la cual se especificarán cosas tales como si el compresor actúa sobre
archivos o chunks de datos, si es un huffman canónico o estándar, archivo
a comprimir, archivo destino, etc.
\family typewriter
-\noun on
HUFF_STATE *shuff_init_encoder_byfile(char *inputfile, char *outputfile,
long volsize);
\layout Itemize
\family typewriter
-\noun on
HUFF_STATE *shuff_init_encoder_bychunk(char *outputfile, long volsize);
\layout Itemize
\family typewriter
-\noun on
HUFF_STATE *shuff_init_decoder(char *inputfile, char *outputfile);
\layout Itemize
\family typewriter
-\noun on
void shuff_deinit_encoder(HUFF_STATE *shuff);
\layout Itemize
\family typewriter
-\noun on
void shuff_deinit_decoder(HUFF_STATE *shuff);
\layout Standard
\layout Standard
Obviamente como eso resultaba muy molesto planteamos un modelo más abstracto
- al que llamamos Virtual File, que es una API escrita sobre la API ANSI-C
- de Input/Output que maneja de manera transparente este tema.
+ al que llamamos
+\emph on
+Virtual File
+\emph default
+, que es una API escrita sobre la API ANSI-C de Input/Output que maneja
+ de manera transparente este tema.
\layout Standard
Utilizar la API esta tan simple como agregar una
\begin_inset Quotes erd
\end_inset
- delante de las funciones fopen, fclose, fread, etc y reemplazar la estructura
- FILE por VFILE.
+ delante de las funciones
+\family typewriter
+fopen
+\family default
+,
+\family typewriter
+fclose
+\family default
+,
+\family typewriter
+fread
+\family default
+, etc y reemplazar la estructura
+\family typewriter
+FILE
+\family default
+ por
+\family typewriter
+VFILE
+\family default
+.
\layout Standard
Cuando se abre un archivo para escritura a medida que se van escribiendo
Cada vez que se llega al EOF de un archivo, si éste no es el último volumen,
se cierra el archivo actual y se abre el siguiente hasta llegar al EOF
del último volumen.
+\layout Standard
+
+Esta API sólo agrega un byte de información de control delante de cada volumen,
+ que indica si es el último volumen del archivo virtual.
+ De esta manera se pueden abrir y leer archivos virtuales sin saber a priori
+ el tamaño de los volúmenes (hasta se podría ampliar la API de escritura
+ para que cada volumen tenga un tamaño distinto y la API de lectura seguiría
+ funcionando sin cambios).
\layout Section
vez superan los 50 ceros seguidos, por lo que de utilizar más de un byte
para expresar la cantidad de ceros que siguen al primero se obtendrían
peores resultados.
+\layout Standard
+
+Con respecto a los tiempos, como se puede observar en el capítulo
+\begin_inset LatexCommand \ref{cha:Benchmarks}
+
+\end_inset
+
+, en muchos casos es incluso más rápido usar el
+\series bold
+ZG
+\series default
+ ya que el
+\series bold
+Huffman
+\series default
+ tiene que comprimir menos y el proceso del
+\series bold
+ZG
+\series default
+ es mucho menor que el del
+\series bold
+Huffman
+\series default
+.
\layout Subsubsection*
Ejemplo:
\series default
es de 22 (incluso cuando hubieron expansiones).
Como se podrá ver en las pruebas del capítulo
-\begin_inset LatexCommand \vref{cha:Benchmarks}
+\begin_inset LatexCommand \ref{cha:Benchmarks}
\end_inset