Posible duplicado:
¿Por qué la compresión ZIP no comprime nada?
Intenté 7zipping un archivo .exe pero en realidad se hizo más grande.
¿Es este el resultado esperado?
compression
zip
7-zip
SOY B
fuente
fuente
Respuestas:
Se reduce a un concepto llamado entropía . Ver Wikipedia .
La idea básica es que, si existiera una operación de compresión que siempre pudiera hacer un archivo más pequeño, entonces la lógica dicta que dicha operación de compresión podría reducir cualquier archivo a 0 bytes y aún retener todos los datos. Pero esto es absurdo , porque sabemos que 0 bytes no pueden transmitir ninguna información. Por lo tanto, acabamos de demostrar que no puede existir un algoritmo de compresión que siempre reduzca su entrada, porque si ese fuera el caso, cualquier información podría almacenarse en 0 bytes, pero 0 bytes implica la ausencia de información, por lo que puede ' t simultáneamente no tiene información y toda la información. Por lo tanto, es absurdo.
Debido a este concepto teórico, cada programa de compresión que utilice aumentará el tamaño de (o, en el mejor de los casos, mantendrá el mismo tamaño de) alguna entrada. Es decir, para cualquier algoritmo de compresión que diseñe o use, habrá ciertas entradas que saldrán más pequeñas, y algunas que no.
Los datos ya comprimidos son generalmente un candidato terrible para una mayor compresión, porque la mayoría de los algoritmos de compresión sin pérdidas se basan en los mismos principios teóricos. Se es posible comprimir datos comprimidos mal aún más; pero esto es menos eficiente que simplemente comprimirlo con el mejor algoritmo disponible de los datos originales para empezar.
Por ejemplo, si tenía un archivo de texto de 100 MB y lo comprime utilizando el algoritmo Zip normal, podría comprimirse hasta 50 MB. Si luego comprime el archivo Zip con LZMA2, puede reducirlo a 40 o 45 MB, porque LZMA tiene una relación de compresión más alta para la mayoría de los datos comprimibles que Zip. Por lo tanto, es lógico pensar que también puede comprimir datos Zip, porque Zip no absorbe por completo toda la entropía. Pero si elimina el contenedor Zip por completo, es posible que pueda hacerlo aún más pequeño al comprimir el texto sin procesar con LZMA2, lo que podría generar algo del orden de 30 a 35 MB (estos son solo "números aéreos" para ilustrar el concepto) .
En el caso de ese binario que está intentando comprimir, es más grande porque el formato de archivo 7-Zip tiene que crear su propia estructura interna y empacar los datos del ejecutable ya comprimido en el formato 7-Zip. Esto contiene cosas como un diccionario, un encabezado de archivo, etc. Estos datos adicionales generalmente están más que compensados por el ahorro de comprimir los datos en sí, pero parece que el ejecutable que está tratando de comprimir ya está comprimido con alguna forma de LZMA; de lo contrario, probablemente reducirá el tamaño del ejecutable o lo aumentará muy ligeramente, en lugar de aumentarlo en 2 MB (que es mucho).
fuente
2^(n+1)-1
posibles mensajes de tamaño n-bits o menos. Nuestro algoritmo debe asignar cada uno de estos a una salida única . Si incluso uno de estos se asigna a un valor con menos bits, otro valor necesariamente debe asignarse a uno con más.Los algoritmos de compresión subyacentes utilizados en 7z no tienen pérdidas . Lo que significa que puede comprimir-descomprimir iterativamente un archivo muchas veces. Además, después de cada iteración, el archivo permanecerá exactamente igual.
Desafortunadamente, no puede esperar que se aplique un algoritmo de compresión sin pérdidas muchas veces con un resultado siempre positivo. Hay un límite estricto que no puede saltar. Aproximadamente, este límite depende de qué tan cerca una secuencia de entrada ensambla datos aleatorios. Sobre todo, los algoritmos sin pérdida se utilizan para la compresión de archivos, transferencias de datos HTML de Internet, copias de seguridad y otras operaciones que esperan que un archivo de salida se descomprima en exactamente el mismo archivo de entrada original.
A diferencia de la compresión sin pérdida, siempre puede esperar una disminución del tamaño del archivo después de la compresión con algoritmos de compresión con pérdida (o pérdida) . La desventaja es que no puede restaurar exactamente un archivo original después de una sola iteración de compresión-descompresión. Estos algoritmos son más famosos por las transmisiones y almacenamiento de audio / video / imagen.
bzip2 , LZMA , LZMA2 y otros algoritmos utilizados por el formato 7z no tienen pérdidas . Por lo tanto, habrá un límite después del cual ya no se puede comprimir. Además de eso, las imágenes ejecutables (.exe) suelen ser archivos muy comprimidos. 7zip como muchas otras herramientas de compresión incrusta algunos metadatos, que de hecho pueden agrandar el archivo de salida.
Rompecabezas: ¿y si tuviéramos un algoritmo sin pérdidas que siempre puede disminuir el tamaño de un archivo?
En este caso, siempre verá que el archivo comprimido es más pequeño que el archivo de entrada. Vea un comentario a continuación por qué no es posible.
fuente
Si el ejecutable original ya estaba comprimido (o contenía datos muy comprimidos o datos no comprimibles), la compresión aumentará el tamaño.
fuente
La mayoría de los algoritmos de compresión usan lo que se llama una tabla de símbolos, básicamente solo partes del archivo que usa como elementos que PUEDE comprimir. Esto, por supuesto, crea algo de sobrecarga en el archivo, pero generalmente resulta en un archivo mucho más pequeño.
En archivos ya comprimidos, todavía crea un conjunto de símbolos, pero hay muy poco que pueda reducir el tamaño. En su caso, la tabla de símbolos del archivo ya comprimido probablemente esté cerca de 2 MB o probablemente más si logró hacer algo de compresión.
fuente
La idea de compresión:
El software de compresión crea una lista de archivos y elimina el contenido duplicado.
al comprimir archivos ya comprimidos, puede hacer que sus archivos comprimidos sean más grandes que el original.
fuente