Como funciona la compresion de archivos?

on viernes, 25 de enero de 2013
Hola Paxuz ya tengo tu sigueinte pregunta.. Hace unos dias me descarge el juego call of duty modern warfare 2 este juego que descargue pesaba 3.5gb pero al descomprimirlo se aumento hasta 6.5gb Ahora mi pregunta es como le hicieron para comprimir el juego de esta manera.. Estuve buscando y muestran muchos programas como el FreeArc, Winuhu, Uharc incluso que con WInrar se puede pero lo malo de los primeros 3 es que no te deja comprimir archivos de mas de 2gb y con el Winrar no te hace una comprencion tan alta... Claro existe tambien el famoso repack que elimina partes no importantes de un juego para que llegue a pesar pero al hacerlo este no redule el tamaño tal lo comento.. Espero y me puedas responder saludos..




Cómo funciona la compresión de archivos?


Si eres de los que estas pegado a la computadora todo el tiempo es muy probable que ya te hayas encontrado con archivos ZIP. Este sistema de compresión ha revolucionado la forma en la cual descargamos archivos de sitios web o incluso de tu correo electrónico ya que reduce drásticamente de tamaño el número de bits y bytes de un archivo para que este pueda ser transmitido más rápidamente, o que ocupen menor espacio en tu disco duro. Una vez que este llega a tu posesión, se utilizan programas de descompresión como Winzip, 7Zip o WinRAR para regresar el archivo a su tamaño original. Si todo funciona correctamente, el archivo será idénticamente igual hasta en el último bit al archivo antes de comprimirse.

A primera vista, esto parece muy misterioso. ¿Como es que se puede reducir el número de bits y bytes y luego agregárselos? Aunque la compresión de archivos pueda llegar a ser bastante misterioso el proceso es bastante sencillo. En este articulo, examinaremos este método simple tomando como en cuenta un ejemplo de un archivo pequeño en el proceso de compresión.

La mayoría de los archivos de computadora son bastante redundantes, Tienen la misma información una y otra vez. Los Programas de compresión simplemente se deshacen de esa redundancia. En vez de listar ese pedazo de información una y otra vez, los programas de compresión la listan una sola vez y luego solo hacen mención a la primera vez.

Como un ejemplo, veamos el siguiente tipo de información, Palabras, las cuales todos nosotros estamos muy acostumbrados:

En 1961, John F Kennedy hizo el siguiente discurso:

"Ask not what your country can do for you -- ask what you can do for your country."

Entre las comillas existen 17 palabras, que a su vez son 61 letras y 16 espacios, 1 guión y un punto. Si cada letra o espacio o signo de puntuación usara una unidad de memoria, lo que tenemos al final son 79 unidades. Si nuestro objetivo es disminuir su tamaño debemos de buscar redundancias.

Inmediatamente nos damos cuenta de que:

"ask" aparece 2 veces
"what" aparece 2 veces
"your" aparece 2 veces
"country" aparece 2 veces
"can" aparece 2 veces
"do" aparece 2 veces
"for" aparece 2 veces
"you" aparece 2 veces

Ignorando la diferencia entre mayúsculas y minúsculas, casi la mitad de la frase es redundante. Nueve palabras --  ask, not, what, your, country, can, do, for, you -- Nos dan casi todo para recrear esa oración. Para construir la segunda parte de la oración, solo necesitamos notar las palabras en la primera mitad y rellenar con espacios y signos de puntuación.


Ya veremos como los sistemas de compresión funcionan con la redundancia más detalladamente en la siguiente sección.


Redundancia y Algoritmos



La mayoría de los programas de compresión, usan alguna variación del "Diccionario adaptativo basado en el algoritmo LZ" para reducir de tamaño a los archivos. "LZ" se refiere a Lempel y Ziv, los creadores de este algoritmo, y el diccionario se refiere al método de catalogar pedazos de información.


El sistema para organizar los diccionarios varían y pueden ser tan simples como una lista numerada. Al ver de nuevo las famosas palabras de Kennedy, podemos tomar las palabras repetidas y ponerlas en un listado, y luego simplemente utilizar el numero en vez de toda la palabra.

Así que si este es nuestro diccionario:


  1. ask
  2. what
  3. your
  4. country
  5. can
  6. do
  7. for
  8. you

Our sentence now reads: "1 not 2 3 4 5 6 7 8 -- 1 2 8 5 6 7 3 4"

Si conoces el sistema, te será fácil reconstruir la frase original utilizando solamente el diccionario y la numeración. Esto es lo que hace el programa de "expansión" cuando lo utilizas sobre un archivo comprimido que previamente has bajado. También es probable que te hayas encontrado con archivos comprimidos que se expanden por si solos. Para crear este tipo de archivos el programador ha incluido un programa expansor simple para que automáticamente, se reconstruya el archivo.

Pero que tanto espacio nos hemos ahorrado con "1 not 2 3 4 5 6 7 8 -- 1 2 8 5 6 7 3 4". Seguramente es más pequeño que "Ask not what your country can do for you; ask what you can do for your country." pero hay que tomar en cuenta que también necesitamos salvar el diccionario junto con el archivo.

Ya vimos que la frase completa utiliza 79 unidades, nuestra oración comprimida utiliza (contando espacios) 37 unidades, y el diccionario, palabras y números también utiliza 37 unidades. lo que nos da un total de 74 unidades, por lo que no hemos reducido nuestro archivo por mucho.

Pero esta solo es una oración!, Ahora imagínate, como funcionaria esta compresión a lo largo de todo el discurso presidencial de Kennedy. Encontraría estas y cientos de otras palabras más que se repiten una y otra vez. También en el siguiente tema veremos cómo reescribir el diccionario para que este tenga una organización lo más eficientemente posible.


Buscando patrones



En nuestro ejemplo anterior, tomamos todas las palabras repetidas y las colocamos dentro de nuestro diccionario. Para nosotros, los humanos, esta es la forma más coherente de escribir un diccionario. Pero un programa de compresión ve las cosas de un modo muy diferente. Un programa de compresión de archivos no conoce el concepto de "Separación de Palabras" el solo busca patrones. Y para que este pueda reducir el tamaño del archivo lo más posible, cuidadosamente añadirá solo las patrones que más le convengan.

Si tratamos de utilizar la misma oración ahora desde esta perspectiva, terminaremos con un diccionario completamente diferente.

Si el programa de compresión de archivos escaneara la frase de Kennedy, la primera redundancia que encontraría seria solamente unas cuantas letras. En "ask not what your," podemos encontrar un patrón repetido de la letra "t" seguido de un espacio, en "not " y "what ". Por lo tanto si el programa de compresión de archivos escribiera esto dentro del diccionario, este, le podría dar un valor de "1" cada vez que una "t" estuviera antes de un espacio. Pero esta frase es tan corta que ese patrón no ocurre en muchas ocasiones, por lo que no es eficiente que lo guarde en su diccionario.

El siguiente patrón que el programa de compresión de archivos se daría cuenta es "ou", que aparece en los dos "your" y "coutry". Si este fuese un documento más largo, escribir este patrón en el diccionario ahorraría mucho espacio. "ou" es una combinación muy común en el idioma ingles. Pero conforme el programa de compresión trabaja en la oración pronto este se daría cuenta de que no solo "ou" se repite, sino que palabras enteras "your" y "country" se repiten y no solo eso, sino que se repiten juntas como una frase "your country". En este caso, el programa reescribiría el diccionario cambiando "ou" por "your country".

La frase "can do for" también se repite, una vez antes de "your" y otra vez antes de "you", así dándonos un patrón de repetición "can do for you". Con esto nos permitimos escribir 15 unidades (incluyendo espacios) con un solo numero, mientras que "your country" solamente nos deja escribir 13 unidades (incluyendo espacios) con un solo numero. Así que el programa de compresión de archivos reescribiría "your country" por "r contry", y luego escribiría en el diccionario como una entrada diferente "can do for you". Los programas de compresión de archivos funcionan de esta manera, recogiendo todos las repeticiones y luego calculándolas para escoger eficientemente que entradas escribir en el diccionario. Esta parte de reescribir el diccionario es la parte "adaptiva" de "Diccionarios adaptativos basado en el algoritmo LZ".

No importa que método especifico utilices, este sistema de búsqueda en profundidad le permite al sistema comprimir archivos más eficientemente que solo el ir tomando palabras. Utilizando los patrones de arriba y añadiendo "__" en vez de espacios, obtenemos un diccionario mas grande.


  1. ask__
  2. what__
  3. you
  4. r__country
  5. __can__do__for__you
Pero una oración más pequeña : "1not__2345__--__12354"

Ahora la oración requiere de tan solo 18 unidades de memoria y nuestro diccionario de 41 unidades. Así que hemos comprimido un archivo de un total de 79 unidades en uno de 59 unidades!. Esta es una de tantas formas de comprimir un archivo, pero aun no es la más eficiente... ¿podrás encontrar una mejor?


Que tan bueno es el sistema? Todo depende de la proporción de reducción y para esto muchos factores entran en consideración como : Tipo de archivo, Tamaño del archivo original, Forma de compresión.


En muchos leguajes del mundo, algunas letras y palabras aparecen en el mismo patrón y es por esta redundancia que los archivos de texto se comprimen muy bien. Una reducción de hasta un 50% o más es lo común en un archivo de texto de tamaño considerable. Muchos programas de lenguajes también son bastantes repetitivos ya que utilizan pequeñas instrucciones a lo largo del archivo y es frecuente que estos patrones los encuentre nuestro programa de compresión de archivos y los ponga en su diccionario.

Archivos que incluyen información única como son las imágenes o archivos MP3, no pueden ser comprimidos bajo este sistema ya que no se repiten muchos factores y por lo tanto nuestro programa no encontrará muchos patrones.

Si nuestro archivo tiene muchos patrones repetidos, la proporción de reducción aumentara conforme al tamaño del archivo. Puedes ver esto simplemente viendo nuestro ejemplo del discurso de Kennedy. Si tuviéramos mas de este mismo discurso podríamos ir detectando patrones más grandes y mejores, por lo tanto aumentaríamos la proporción de reducción de nuestro archivo. También el tiempo es un factor que aun no tocamos, pero entre más tiempo le demos a nuestra computadora para que busque estos patrones. mejor va a ser nuestra tasa de reducción.

Esta eficiencia también depende mucho del algoritmo especifico que utilice nuestro programa. Algunos programas son más fuertes que otros en ciertos tipos de archivos. Algunos programas tiene diccionarios dentro de diccionarios (Diccionariception) los cuales comprimirán archivos grandes con un "ratio" mejor que archivos pequeños. Mientras que todos los programas de compresión de archivos funcionan con la misma idea, existen cientos de variaciones. Los programadores siempre están tratando de construir un mejor sistema.



Lossy and Lossless Compression



El tipo de compresión que hemos visto hasta ahorita lo llamamos "lossless compression" ya que te deja recrear el archivo original exactamente. Todas las compresiones lossless están basadas en la idea de romper un archivo y hacerlo pequeño para enviarlo por internet o guardarlo, pero que al final lo puedas regresar a su posición original. Bit por bit.

La compresión "Lossy" trabaja de forma MUY diferente. estos programas simplemente eliminan información innecesaria, disminuyendo el archivo para que este pueda ser más pequeño. Este tipo de compresión es utilizada comúnmente para reducir archivos de imágenes que tienden a ser muy grandes. Para nuestro ejemplo piensa en como tu computadora comprimiría una imagen escaneada.



Un programa de compresión de archivos "Lossless" no le haría nada a este tipo de archivos. Mientras que grandes secciones de la imagen pudiesen parecer iguales, ejemplo el cielo azul, casi todos los pixeles son diferentes entre sí. Para reducir el tamaño de la imagen sin comprometer la resolución, tendríamos que cambiar el color de ciertos pixeles. Si la imagen tiene mucho azul de cielo, el programa tomaría un color de azul que pudiese utilizar para cada uno de los pixeles. Luego, el programa reescribiría el archivo para que cada uno de los pixeles del cielo se refieriera a este que escogimos. Si la compresión funciono bien, no notarias un cambio, pero el archivo se reduciría drásticamente.


Claro está que con la compresión "lossy" no puedes obtener el archivo original una vez que se sometió a este procedimiento. Lo hecho... hecho esta. Es por esta razón que no puedes utilizar este tipo de compresión para nada que se necesite reproducir exactamente igual a su estado natural, como son aplicaciones de software, bases de datos, discursos presidenciales o call of duty modern warfare 2.


Estamos listos para la Siguiente Pregunta!

1 comentarios:

Anónimo dijo...

Disculpe gran y poderoso Paxuz, pero hay algo que durante unos días no puedo sacar de mi cabeza. Y es que recientemente tengo un interés desmedido por conocer mas acerca las impresoras 3D. Son muy caras y he visto que algunas usan filamentos para imprimir y otras una especie de arena, Algunas solo un color base y otras con colores. Mas sin embargo es todo lo que conozco sobre ellas y no he encontrado mucha informacion. Me pregunto si, ¿Podría usted decirnos todo acerca de estos aparatos?

Publicar un comentario