¿Cuál es la relación de compresión máxima de gzip?
¿Cuál es el mayor tamaño al que se puede descomprimir un gzip (digamos 10kb por poner un ejemplo)?
¿Cuál es el mayor tamaño al que se puede descomprimir un gzip (digamos 10kb por poner un ejemplo)?
Actualización 2020-02-06: Como se menciona en los comentarios, no he podido reproducir el resultado original con gzip. Trabajando en la suposición de que accidentalmente usé un formato de compresión diferente en esa prueba rápida original, he repetido con gzip y he actualizado las cifras de abajo en consecuencia. Este nuevo resultado coincide con la compresión máxima teórica indicada en otras respuestas/comentarios.
Depende mucho de los datos que se compriman. Una prueba rápida con un archivo de 1Gb lleno de ceros usando una versión estándar de gzip (con las opciones por defecto o especificando -9) da un tamaño comprimido de ~1018Kb, por lo que tu archivo de 10Kb podría expandirse potencialmente en ~10Mbytes.
Si los datos tienen poca redundancia para empezar, por ejemplo, el archivo contiene ficheros de imágenes en un formato que se comprime de forma nativa (gif, jpg, png, …), entonces gzip puede no añadir más compresión en absoluto. En el caso de los archivos binarios, como los ejecutables de programas, es posible que la compresión sea de hasta 2:1, mientras que en el caso del texto plano, el HTML u otras marcas, no es improbable que sea de 3:1 o 4:1 o más. En algunos casos se puede ver una relación de 10:1, pero la relación de ~1030:1 que se observa en un archivo lleno de un solo símbolo es algo que no se va a ver fuera de circunstancias igualmente artificiales.
Puede comprobar la cantidad de datos que resultaría de descomprimir un archivo gzip, sin escribir realmente su contenido descomprimido en el disco, con gunzip -c file.gz | wc --bytes
- esto descomprimirá el archivo pero no almacenará los resultados, en su lugar los pasará a wc
que contará el número de bytes a medida que pasan y luego los descartará. Si el contenido comprimido es un archivo tar que contiene muchos archivos pequeños, es posible que se requiera mucho más espacio en disco para descomprimir el archivo completo, pero en la mayoría de las circunstancias, el recuento devuelto por la salida de gunzip
a través de wc
va a ser tan preciso como usted necesita.
Normalmente no se obtiene más de un 95% de compresión (por lo que 10kB de datos gzipped se descomprimirían a ~200kB), pero hay archivos especialmente diseñados que se expanden exponencialmente. Busca 42.zip
, se descomprime a unos cuantos petabytes de datos (sin sentido).
Citado textualmente de https://stackoverflow.com/a/16794960/293815
La relación de compresión máxima del formato deflate es de 1032:1. Esto se debe a que la tirada más larga que se puede codificar es de 258 bytes. Se necesitan al menos dos bits para cada recorrido de este tipo (un bit para el código de longitud y un bit para el código de distancia), por lo que se pueden codificar 4*258 = 1032 bytes sin comprimir por un byte comprimido.
Se puede obtener más compresión comprimiendo el resultado de gzip. Normalmente esto no mejora la compresión, pero en el caso de ejecuciones muy largas puede hacerlo.
Por cierto, el enfoque LZ77 utilizado por deflate es más general que la codificación de longitud de ejecución. En lugar de sólo una longitud, se utiliza un par longitud/distancia. Esto permite copiar una cadena desde cierta distancia hacia atrás, o replicar un byte como en run-length para una distancia de uno, o replicar triples de bytes con una distancia de tres, etc.
La relación de compresión de cualquier algoritmo de compresión será una función de los datos que se comprimen (además de la longitud de esos datos).
Aquí hay un análisis en MaximumCompression , Mira una de las muestras como, Summary of the multiple file compression benchmark tests
File type : Multiple file types (46 in total) # of files to compress in this test : 510 Total File Size (bytes) : 316.355.757 Average File Size (bytes) : 620,305 Largest File (bytes) : 18,403,071 Smallest File (bytes) : 3,554
La respuesta a tu pregunta, depende de la entrada. Para que te hagas una idea de cómo se realiza la compresión, mira este vídeo de seis minutos. https://www.youtube.com/watch?v=ZdooBTdW5bM
Lo que debes entender es que la tasa de compresión depende de la frecuencia de cada carácter, por lo tanto no hay una tasa máxima generel, depende de la entrada, para el texto en inglés es alrededor del 65 por ciento.