ejemplos de compresión basada en gramaticas

Anuncio
COMPRESIÓN BASADA EN GRAMATICAS
Para lograr comprimir se realizan los siguientes pasos:

Primero se abre el archivo a comprimir y se van tomando conjuntos de 3 y 6 bytes.
Los conjuntos de 3 bytes se ponen en un arreglo y los de 6 en otro.

Se avanza por todo el arreglo de series de 3 bytes contando cuales se repiten 2 o
más veces y se marcan.

Se extraen solamente las series repetidas 2 o más veces a un nuevo arreglo evitando
la repetición entre sí mismas.

Se analiza todo el arreglo de series de 6 bytes partiendo cada serie en 2 partes de 3
bytes. Cada parte se busca en el arreglo de 3 bytes. Si ambas partes están en el
arreglo de 3 bytes, se crea una producción.

Nuevamente se analiza el arreglo de producciones para evitar repeticiones entre sí
mismas.

Ahora, se copia todo el archivo a un buffer en memoria y se va avanzando byte a
byte. Se compara la posición actual del puntero con cada entrada de 6 bytes, si
existe alguna concordancia, entonces se reemplazan esos 6 bytes por 1. Si no es así,
ahora se compara con cada entrada de 3 bytes y se hace lo mismo. En caso de que
no exista un patrón en las producciones de 6 y 3 bytes, se copia dicho byte al
archivo de salida, es decir, el byte sin modificación.

Por cada byte que se reemplaza, se va llenando una estructura de datos con la
información de la gramática que lo contiene y el offset del byte en el archivo (para
saber después donde reemplazar ese byte en la descompresión).

Por último, se envía toda la información necesaria recopilada al archivo gramática
el cual servirá para la descompresión.

Para implementar la descompresión, solamente se hace todo este proceso en orden
inverso, es decir, se lee el archivo compreso, se cargan las estructuras de datos del
archivo gramática y se va analizando el archivo de entrada y expandiendo al archivo
de salida utilizando información del archivo gramática.
EJEMPLOS
Ejemplo 1. Contenido: AAAABCDAAABCDEFGHIAAFGHIA
AAA
AAA
AAB
ABC
BCD
CDA
DAA
AAA
AAB
ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIA
IAA
AAF
AFG
FGH
GHI
HIA
k
k
l
m
n
k -> AAA
l -> AAB
m -> ABC
n -> BCD
o -> FGH
p -> GHI
q -> HIA
[0] k -> AAA
[1] m-> ABC
[2] n -> BCD
[3] o -> FGH
r -> k m
s -> k n
t -> n k
[0] r -> k m
[1] s -> k n
k
l
m
n
o
p
q
o
p
q
AAAABC
AAABCD
AABCDA
ABCDAA
BCDAAA
CDAAAB
DAAABC
AAABCD
AABCDE
ABCDEF
BCDEFG
CDEFGH
DEFGHI
EFGHIA
FGHIAA
GHIAAF
HIAAFG
IAAFGH
AAFGHI
AFGHIA
r
s
t
s
COMPRESO: 0D1E3IAA3IA
Ejemplo 2.- Contenido: ABCDEFABCDEFGHIGHI
ABC
BCD
CDE
DEF
EFA
FAB
ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIG
IGH
GHI
k
l
m
n
k -> ABC
l -> BCD
m -> CDE
n -> DEF
o -> GHI
[0] k -> ABC
[1] n -> DEF
[2] o -> GHI
k
l
m
n
o
o
ABCDEF
BCDEFA
CDEFAB
DEFABC
EFABCD
FABCDE
ABCDEF
BCDEFG
CDEFGH
DEFGHI
EFGHIG
FGHIGH
GHIGHI
p
q
p
r
s
COMPRESO: 001
p -> k n
q -> n k
r -> n o
s -> o o
[0] p -> k n
[1] s -> o o
Descargar