¿Cómo funciona la compresión de archivos?

Una excelente manera de explicar esto es con una analogía.

Imagine que en lugar de tener palabras cortas para representar definiciones complejas, todos tenemos que usar definiciones complejas. La compresión toma ideas complejas y las comprime en palabras más pequeñas.

Como ejemplo, hagamos algo de compresión en la vida real.

Digamos que tengo una oración para enviar a un amigo:

“Tengo un gran deseo de que todas las personas comiencen la práctica de transacciones comerciales y comerciales no contenciosas sobre la gran roca en la que actualmente estamos vivos”.

Es una oración bastante prolija para representar la idea de que quiero la paz mundial, pero mi amigo solo puede entender estas palabras y no las más complejas que usamos con más frecuencia. Solo, no podemos hacer esta oración mucho más corta sin el conocimiento de más palabras más allá de las proporcionadas. ¡Podemos generar una oración más corta si creamos un diccionario de palabras cortas para representar las frases más largas!

Diccionario:
Bobble: tengo un gran deseo
Gafas: todas las personas
Frithy: la práctica del comercio no contencioso
Hobot: transacciones comerciales
Tierra: la gran roca en la que actualmente estamos vivos

Nueva oración [usando el diccionario]
“Bobble que las gafas comenzarían frithy y hobot sobre la Tierra”.

¡La oración es definitivamente más corta! Cuando el amigo quiere darle sentido a la oración, simplemente puede sustituir las palabras en el diccionario que aparecen en la oración con su definición correspondiente, ¡y no se pierde información en la sustitución!

Desafortunadamente, esto en realidad no hace que los datos se envíen más pequeños, solo esa oración. Esto se debe a que debemos enviar el diccionario ADEMÁS a la nueva oración. Esto elimina el beneficio de la nueva oración y, de hecho, AUMENTA el tamaño de los datos totales que se transmiten.

Entonces puede que se pregunte cuál es el punto de la analogía; después de todo, solo aumentamos el tamaño de los datos, no los comprimimos.

Bueno, este enfoque de sustitución de diccionario no funciona para cadenas de datos sin patrones. Digamos que tengo algo como esto para enviarle a mi amigo:

“la gran roca en la que actualmente estamos vivos. La gran roca en la que actualmente estamos vivos. La gran roca en la que actualmente estamos vivos. La gran roca en la que actualmente estamos vivos. Catorce. La gran roca en la que estamos actualmente vivo en. la gran roca en la que actualmente estamos vivos. en la gran roca en la que actualmente estamos vivos. en la gran roca en la que actualmente estamos vivos. Púrpura “.

Esa oración tiene la misma frase repetida ocho veces: ¡algo con lo que la sustitución del diccionario puede ayudarnos!

Diccionario:
E: “la gran roca en la que actualmente estamos vivos”.

Nueva oración [usando el diccionario]
“EEEEFourteen. EEEEPurple”

¡Esa es una diferencia de tamaño increíble, incluso cuando incluye el diccionario!

Esto es similar a cómo funciona la compresión en las computadoras: el programa de compresión analiza los datos de los elementos que se repiten con frecuencia, crea una entrada en un diccionario y luego reemplaza cada aparición del objeto repetido con la palabra en el diccionario correspondiente al patrón. Esta es la esencia de la compresión sin pérdidas. Existen otros tipos de compresión especializados para otras tareas, pero esta es la compresión de datos genérica.

La diferencia entre la forma en que ciertas aplicaciones comprimen archivos es puramente un detalle de implementación. Compiten tratando de encontrar la forma más rápida o efectiva de encontrar patrones y crear entradas de diccionario. Algunos programas dicen que es su camino, mientras que otros dicen que es otro. El que mejor se usa a menudo está determinado por el tipo de archivo que está comprimiendo.

No comprimido

Ese Sam-I-Am!
Ese Sam-I-Am!
¡No me gusta ese Sam-I-Am!
¿Te gustan los huevos verdes y el jamón?
¡No me gustan, Sam-I-Am!
¡No me gustan los huevos verdes con jamón!
¿Les gustaría aquí o allá?
No me gustaría tenerlos aquí o allá.
No me gustaría en ningún lado.
No me gustan los huevos verdes con jamón.
No me gustan, Sam-I-Am.

Caracteres totales = 322

Comprimido

1 = sombrero
2 = Sam-Yo-Soy
3 = no me gusta
4 = huevos verdes y jamón
5 = te gusta
6 = aquí o allá
7 = no me gustaría

T1 2!
T1 2!
3 t1 2!
Do 5 4?
3 4!
¿Serían 5 de ellos 6?
7 6.
7 en cualquier lugar.
3 4.
3 ellos, 2.

Caracteres totales = 186.

Tasa de compresión = 58%. Seguramente mejoraría mucho a medida que avanza la historia

El video generalmente se filma con 24 o 30 cuadros por segundo. Eso significa que cada segundo, se muestran 24 o 30 imágenes fijas para dar la ilusión de movimiento. Debido a que las imágenes están tan estrechamente vinculadas, no todo en la imagen se mueve de cuadro a cuadro. La compresión almacena los cambios en los cuadros en lugar de almacenar cuadros completos.

Hay varios términos clave que encontrará constantemente a medida que comience a comprimir más videos.

Códec : este es un método que utiliza su computadora para decidir la cantidad de cambio que se produce entre cuadros.

Fotograma clave : este es un marco de referencia. El códec determinará un fotograma clave cada pocos fotogramas. Este es el marco base para los próximos marcos de cambio. Su intervalo de fotogramas clave tendrá un gran impacto en el tamaño de su archivo terminado. Muchos fotogramas clave harán que el archivo sea grande pero de mayor calidad. Los fotogramas clave poco frecuentes dejarán muchos artefactos.

Artefactos : son piezas de imagen en bloques que son el resultado de que el fotograma clave no se actualiza correctamente. Cuanto menor sea la calidad de la compresión, más artefactos aparecerán.

Velocidad de bits / datos : esta es la cantidad de datos que usa cada segundo de video. Por lo general, esto se mide en kilobits por segundo. Las velocidades de bits pueden ser constantes o variables. Una velocidad de bits constante permanece igual en todo el video, lo que puede generar archivos de video más grandes. Una tasa de bits variable cambia según la cantidad de acción en la pantalla, lo que conducirá a archivos más pequeños.

Tasas de bits variables : que pueden disminuir la calidad si la tasa de bits no cambia de forma dinámica con el video. Experimente con ambas velocidades de bits para encontrar un equilibrio entre el tamaño y la calidad aceptable.

Velocidad de cuadros : este es el número de cuadros por segundo. Los videos generalmente se graban en 24 o 30 cuadros por segundo. Mantenga la velocidad de fotogramas de la copia comprimida igual, de lo contrario, la reproducción se verá afectada y el audio podría no sincronizarse correctamente.

Resolución : este es el tamaño del video emitido. Se mide en píxeles, ancho x alto.

Comprimir video para YouTube / Vimeo

1. Comprende por qué necesitas comprimir. Los archivos de video sin procesar, especialmente el video HD, pueden ejecutar varios gigabytes de tamaño. Si bien puede cargar archivos grandes en YouTube y Vimeo, esto puede llevar mucho tiempo. Además, estos servicios comprimirán su archivo una vez que se cargue, y a menudo los resultados no son de muy alta calidad. Comprimir tu video tú mismo te permite controlar tanto el tamaño como la calidad.

2. Abra su archivo de video sin procesar en un programa de edición de video. Hay soluciones gratuitas disponibles en línea, así como productos profesionales como After Effects, Final Cut y más. Los menús específicos variarán entre los programas, pero la configuración es universal en todas las plataformas.

3. Exportar el video. Para comenzar el proceso de compresión, deberá exportar el video. Esto convertirá el video a un formato que se pueda reproducir en todos los sistemas y dispositivos, incluidos los formatos compatibles con YouTube y Vimeo.

4. Seleccione el formato del archivo. El formato del archivo cambiará según lo que planee hacer con el archivo final. La mayoría de los sistemas y dispositivos reproducirán archivos MP4, lo que lo convierte en el tipo de archivo más aceptado universalmente. Esto incluye sistemas de juegos como PlayStation 3.

5. Seleccione el formato de video (códec). H.264 es el códec más utilizado y es compatible con la mayoría de los sistemas. Este es el códec preferido para cargar videos que se transmitirán en línea. El video HD debe estar codificado en High Profile H.246.

6. Seleccione la velocidad de bits. Para video SD, use una velocidad de bits entre 2,000-5,000 kbps. El video de 720p debe tener una velocidad de bits entre 5,000-10,000 kbps. El video de 1080p debe tener una velocidad de bits de 10,000-20,000 kbps.

7. Seleccione la resolución (tamaño de imagen). Intenta mantenerlo igual que tu video sin procesar. Los sitios web de transmisión agregarán sus propias opciones de resolución después del proceso de carga.

8. Ajuste el fotograma clave y la velocidad de fotogramas. Codifique su video en la misma velocidad de cuadros en la que lo grabó. Si grabó por encima de 30 cuadros por segundo, codifique a la mitad (por ejemplo, un video de 60 FPS se codificaría a 30 FPS). Mantenga el fotograma clave igual que la velocidad de fotogramas.

9. Seleccione el modo de codificación. En general, elija la codificación multi-pas (mejor). Esto llevará más tiempo que una sola pasada, pero dará como resultado un video notablemente de mayor calidad.

10. Configure sus opciones de audio. Elija AAC-LC como formato de audio, ya que tiene el soporte más amplio y la mejor calidad. Para la velocidad de datos, seleccione 320 kbps. Si tienes música, elige Estéreo. Si no tiene música, seleccione Mono. Su frecuencia de muestreo de salida debe ser 48,000 kHz

MÁS DETALLES: El mejor software de compresión de películas de video

Utilizan diversas técnicas de compresión.

Te daré un ejemplo de una técnica simple. Se llama técnica de máxima varianza de huffman.


Aquí, primero lee el archivo y luego encuentra la probabilidad de que ocurra cada símbolo en ese archivo … y lo escribe en orden descendente. Entonces, el símbolo más frecuente en el archivo estará en la parte superior. [Aquí, Símbolo A]

Combina al menos dos probabilidades y crea un nuevo símbolo temporal. [Aquí, la combinación de D y E hace un símbolo E ‘(no se muestra en la figura, el símbolo temporal es solo para su conveniencia)]

Hazlo hasta que solo haya dos símbolos.

Ahora, así es como se ve tu árbol.

UNA’

A B ‘

ANTES DE CRISTO’

B C D E

Asigne el lado inferior de la rama a 0 y el lado derecho de la rama a 1.

Ahora,

Palabra de código de A = 0.
Palabra de código de B = 100
Palabra de código de C = 101
Palabra de código de D = 110
Palabra de código de E = 111.

Si supongamos que su archivo era AAAABCDE. Aquí, el símbolo A ocurre más.

Antes de la compresión, enviará 8 bits para cada símbolo. Entonces, serán 64 bits.

Después de la compresión, enviará 0 0 0 0 100 101 110 111. Eso es solo 20 bits.

Existen otras técnicas que puede utilizar, como el enfoque LZ77, LZSS o LZ78.

No existe el algoritmo detrás de la compresión de archivos. En cambio, los algoritmos de compresión usan una colección de heurísticas que se sabe que funcionan bien en la práctica. Por ejemplo:

  • La codificación de Huffman examina las frecuencias de caracteres / cadenas cortas y comprime la entrada al asignar códigos más cortos a objetos más frecuentes.
  • La codificación de longitud de ejecución examina cosas que se repiten muchas veces seguidas y las codifica como “repetir xy veces”
  • Lempel – Ziv – Welch y algoritmos de compresión similares crean un diccionario de cadenas que ya han visto en la entrada, y luego las reutilizan cuando se repiten algunas cadenas. El archivo comprimido contendrá instrucciones como “mirar hacia atrás 120 caracteres y copiar 5 caracteres desde allí”.
  • La transformación Burrows – Wheeler es una transformación de cadena reversible “mágica” utilizada en bzip2. La cadena transformada generalmente se puede comprimir mejor porque las cosas que aparecieron en un contexto similar antes de la transformación son consecutivas después. (Si eso no tiene sentido, siéntase libre de aceptar que hace magia).
  • Algunos algoritmos de compresión usan “metaheurística” 🙂
    Por ejemplo, al comprimir una imagen de Gráficos de red portátiles (PNG), primero recorremos la imagen píxel por píxel e intentamos predecir su valor a partir de los píxeles vistos anteriormente. Luego, en lugar de comprimir los píxeles reales, comprimimos los errores de nuestras predicciones (es decir, cuánto fue la predicción desactivada). Cuanto mejores sean nuestras predicciones, más cerca estarán los errores de todos los ceros, más fácil será comprimirlos.
  • Sin embargo, otros algoritmos de compresión tienen pérdidas : al comprimir el archivo estamos perdiendo información. Más precisamente, generalmente tenemos una compensación entre el tamaño del archivo comprimido y la calidad del resultado.
    Por ejemplo, en formatos de audio como el formato MP3, básicamente estamos tratando de aproximar la función de onda original mediante una colección de funciones periódicas simples (por ejemplo, senoidal). Cuantos más usemos, más precisamente podremos aproximarnos al original, pero más espacio en disco necesitamos.
    Hay compensaciones similares al comprimir imágenes (por ejemplo, JPEG) y video (por ejemplo, MPEG-4 y muchos otros en los últimos años).

Finalmente, tenga en cuenta que no podemos hacer nada mejor que esto. La compresión exacta (sin pérdidas) siempre se verá de esta manera: siempre será una colección de hacks que funcionan decentemente porque nuestra forma original de almacenar información era redundante de una manera predecible. Aunque podemos definir la forma óptima de comprimir un archivo (es decir, su complejidad de Kolmogorov), también podemos demostrar que dicha compresión no puede calcularse algorítmicamente.

A2A.

Existen muchas técnicas de compresión que se pueden usar, según el tipo de archivo.

Supongamos que tiene un archivo de texto en inglés. Si utiliza la codificación ASCII, cada letra del archivo utilizará 8 bits. Pero, de la siguiente figura, vemos que todas las letras del alfabeto no aparecen con la misma frecuencia.
(Fuente: frecuencia de letras)
Por lo tanto, si asigna códigos de bits más pequeños a las letras que aparecen con más frecuencia, el promedio de bits por letra se reducirá. Puede leer los detalles aquí.

Si tiene un archivo de imagen, puede comprimirlo explotando una propiedad diferente. La mayoría de las imágenes naturales tendrán grandes regiones con colores similares. Entonces, si representa el color de un píxel usando, digamos, 8 bits, para almacenar los colores de los píxeles vecinos, no necesita 8 bits, porque la diferencia entre los dos píxeles es un número pequeño que puede representarse usando menos bits

La mayoría de los programas de compresión utilizan una variación del algoritmo adaptativo basado en el diccionario LZ para reducir los archivos. “LZ” se refiere a Lempel y Ziv , los creadores del algoritmo, y “diccionario” se refiere al método de catalogación de datos.
En la mayoría de los idiomas del mundo, ciertas letras y palabras a menudo aparecen juntas en el mismo patrón. Debido a esta alta tasa de redundancia, los archivos de texto se comprimen muy bien. Una reducción del 50 por ciento o más es típica para un archivo de texto de buen tamaño. La mayoría de los lenguajes de programación también son muy redundantes porque usan una colección relativamente pequeña de comandos, que con frecuencia van juntos en un patrón establecido. Los archivos que incluyen una gran cantidad de información única, como gráficos o archivos MP3, no se pueden comprimir mucho con este sistema porque no repiten muchos patrones (más sobre esto en la siguiente sección).
Si un archivo tiene muchos patrones repetidos, la tasa de reducción generalmente aumenta con el tamaño del archivo. Además, pueden surgir patrones más penetrantes en el trabajo más largo, lo que nos permite crear un diccionario más eficiente.

Esta eficiencia también depende del algoritmo específico utilizado por el programa de compresión. Algunos programas son particularmente adecuados para recoger patrones en ciertos tipos de archivos, por lo que pueden comprimirlos de manera más sucinta. Otros tienen diccionarios dentro de los diccionarios, que pueden comprimirse eficientemente para archivos más grandes pero no para archivos más pequeños. Si bien todos los programas de compresión de este tipo funcionan con la misma idea básica, en realidad hay una gran variación en la forma de ejecución. Los programadores siempre intentan construir un mejor sistema.

Para ponerlo en los términos más generales:

A) Identifique un rasgo que a menudo es verdadero, y verdadero en mayor medida, de los archivos que realmente queremos comprimir, que de los archivos en general. Algunos ejemplos:

  • Ciertos valores tienen muchas más probabilidades de aparecer que otros; por ejemplo, en los archivos ASCII, los valores “superiores” que incluyen el alfabeto y los dígitos numéricos ocurrirán con mucha más frecuencia que los valores “inferiores”.
  • Es probable que los patrones de valores que ocurren una vez ocurran nuevamente; por ejemplo, si el patrón “the” ocurre en cualquier parte del archivo, es probable que ocurra muchas veces.
  • Los valores ocurren en ciertos patrones; por ejemplo, los valores numéricos solo pueden ascender, nunca descender.

B) Luego encontramos formas de expresar el contenido del archivo, donde podemos decir “esta sección de datos coincide con los rasgos que identificamos”, y luego, habiendo reducido las posibilidades de lo que podrían ser los datos, necesitamos menos bits para comunicar qué esos datos son Algunos ejemplos:

  • En una codificación Huffman óptima, el número de bits necesarios para codificar un valor es el logaritmo inverso de su probabilidad, redondeado. Por lo tanto, un valor que se produce la mitad del tiempo se codificaría con un solo bit como “0”; todos los demás valores comenzarían con “1”.
  • En la compresión de “ventana deslizante”, tanto el codificador como el decodificador realizan un seguimiento de los N caracteres más recientes procesados ​​(donde N es un valor tan grande como sea posible, como 32K) en un búfer. Los datos nuevos se pueden expresar como valores literales, o al encontrar datos coincidentes que ya están en el búfer y comunicar en qué parte del búfer comienza esa coincidencia y cuánto dura.
  • Si sabemos con certeza que un conjunto de valores numéricos solo aumentará, nunca disminuirá, podemos preprocesar los datos, cambiando cada valor a cuánto es mayor que el valor anterior. Esto a menudo convertirá los datos en un formulario donde ciertos valores son mucho más probables que otros.

Uno de los métodos más simples de compresión es la codificación de longitud de ejecución (RLE).

Digamos que tiene una imagen con un fondo azul claro. Por cada fila de píxeles en lugar de almacenar “azul, azul, azul, … azul, etc.” 1000 veces, simplemente podría almacenar “1000, azul” y ahorraría mucho espacio. Al decodificar la imagen, el algoritmo simplemente la lee y dice: “oh, necesita azul mil veces. No hay problema”.

Para filas con otros colores, podría verse así: “36, azul, 73, rojo, 42, magenta, 5, verde, 86, gris …” Esto es aún mejor que almacenar cada valor de píxel. Al hacer esto, reduce la cantidad de bytes necesarios para almacenar la información de la imagen. Por supuesto, los colores se almacenan con números, no con palabras, pero se entiende la idea.

Este es un ejemplo de compresión sin pérdidas. Esto se debe a que puede extraer la imagen exacta en el proceso de decodificación. Es decir, no pierde ninguna información en absoluto. Esto no solo se aplica a las imágenes, sino que se puede usar para comprimir cualquier archivo).

También existe una compresión con pérdida, donde la información puede desecharse y aún ser aceptable. Piensa en una imagen de nubes. Divida la imagen en pequeños bloques de 8 × 8 y verá que algunos de ellos pueden aproximarse por un gradiente y pueden almacenarse simplemente como dos colores y una dirección. La imagen real no se puede reconstruir exactamente, pero el resultado es aceptable para el ojo humano, por lo que vale la pena reducir el tamaño de los datos.

La música también se puede comprimir con compresión con pérdida y aún ser aceptable para el oído. Pero otros tipos de datos no pueden permitirse perder un solo bit de información. Un programa de computadora debe construirse exactamente; de ​​lo contrario, el programa ejecutará comandos extraños y provocará un bloqueo del sistema.

La compresión es importante porque no solo ocupa menos espacio en la memoria y en el disco, sino que también es mucho más rápido transferir a través de los canales de comunicación. Por ejemplo, cuanto más se comprimen las imágenes, los sonidos y otros datos, más rápido se cargará una página web.

Para los archivos donde se requiere compresión sin pérdidas, la técnica común es algo como el algoritmo Lempel-Ziv-Welch (LZW), que busca secuencias repetidas de caracteres en el archivo y las reemplaza con una secuencia de bits mucho más corta. Al mismo tiempo, se construye un diccionario de qué patrón de bits cortos corresponde a qué secuencia más larga. Este proceso itera a través del archivo y construye de manera adaptativa el conjunto más optimizado de secuencias acortadas que puede, de modo que el proceso se puede revertir para reconstruir los datos originales en su forma exacta. El grado de compresión está directamente relacionado con cuántas secuencias repetidas se pueden descubrir y cuánto duran. Por lo tanto, ciertos tipos de archivos se prestan mejor a la compresión sin pérdidas que otros.

Para los archivos donde se permite la compresión con pérdida, como fotos, música y video, se utilizan diferentes algoritmos que tienen en cuenta los modelos de percepción humana, de modo que los datos reconstruidos no son una copia matemáticamente exacta del original. Sin embargo, la pérdida de algunos de los datos originales es, con un buen algoritmo, una versión razonable del original de tal manera que el usuario todavía considere aceptable la reconstrucción resultante. Esto se debe a que el algoritmo funciona solo para eliminar datos que contribuyen a aspectos menos perceptibles de los datos (por ejemplo, las bandas de frecuencia más silenciosas en el audio están perceptualmente enmascaradas por las más fuertes y más prominentes). En tales algoritmos, la calidad de la reconstrucción generalmente se puede mejorar intercambiando una mayor calidad por un menor grado de pérdida de datos (y, por lo tanto, una menor efectividad de la compresión). Sin embargo, la “aceptabilidad” es una medida inherentemente subjetiva, y algunas personas consideran que los resultados de los algoritmos con pérdidas son objetables a un tamaño / tasa de bits máxima permitida particular del archivo resultante, donde otros pueden notar poca o ninguna diferencia en la misma configuración.

Quizás el archivo, en bits y bytes, se vea así:

01100100110100101100000100111010110101100100…

¿Ves cómo ese patrón “011” vuelve a aparecer seis veces arriba? Quizás intente ahorrar algo de espacio simplemente sustituyendo la letra “A” cada vez que vea “011”.

Entonces ahora mi patrón se ve así:

A0010A01001A0000010A101A01A00100…

¿Ver? Acabo de guardar (comprimir) 12 espacios potencialmente – convertí 18 espacios en 6 espacios. Mi archivo de muestra ahora es ~ 73% del tamaño que solía ser (32 de un original 44). Sí, cuando llegue el momento de “descomprimir” el archivo, me llevará unos segundos volver y sustituir “011” en lugar de cada “A”, pero esa es la compensación espacio-tiempo haces cuando comienzas a comprimir cosas.

El verdadero mecanismo de compresión es un poco más complicado (la codificación de prefijos y demás, debe asegurarse de que nadie se confunda “011” con “01” y sustituya erróneamente); además, los algoritmos de compresión modernos usan estructuras de árbol largas, o incluso un Diagrama extraño de cinco círculos superpuestos que se parece un poco a los anillos olímpicos, pero ese ejemplo con suerte transmite la idea general.

Supongamos que estamos usando un sistema de archivos que toma una unidad de memoria por cada carácter / número.

Si su archivo contiene esto:

0000000000

Tomará 10 unidades de memoria. Un algoritmo de compresión intentará representar esto en una forma significativa (sin perder ningún significado), al mismo tiempo intentará conservar la memoria. Lo hace al encontrar una descripción más corta del contenido del archivo.

Una posible compresión sería describir el archivo como

10 ceros

Esto toma 8 unidades de memoria (incluido el espacio).

Un algoritmo más inteligente lo describiría usando aún menos espacio:

10: 0

Donde el desarrollador ha descrito el algoritmo como .

Es importante tener en cuenta que el algoritmo debe estar diseñado de tal manera que podamos descomprimirlo para recuperar el contenido original.

Uno de los primeros algoritmos de compresión que se enseña a los estudiantes de ciencias de la computación es el Cifrado de longitud de ejecución o la Compresión de longitud de ejecución.

Esto hace la compresión simplemente contando los caracteres al igual que el algoritmo de ejemplo anterior. Por ejemplo, un archivo que contiene la secuencia aaabbcddddef se comprimirá a a3b2cd4ef.

Un buen algoritmo de Cifrado de longitud de ejecución verificará si la secuencia comprimida es más corta que la original, y comprimirá solo si se cumple esa condición.


Un poco más que una explicación laica:

La compresión funciona porque, afortunadamente, la mayoría de los datos son escasos. Con esto quiero decir que, la mayoría de los datos son ruidos / redundantes. Imagine que estamos en un mundo binario, donde 1 significa presencia y 0 significa ausencia, en ese caso encontrará más 0s que 1s.

También eche un vistazo a la complejidad de Kolmogorov, que es uno de los temas fundamentales en la teoría de la información que habla sobre la elección entre si es mejor dejar la cadena comprimida o en su representación original.

básicamente hay dos tipos de algoritmos de compresión …
1. sin pérdida
2. Pérdida.
En la compresión sin pérdidas, como su nombre indica, los datos en la descompresión no pierden su detalle. Mientras que, por otro lado, los algoritmos con pérdida tienden a perder los detalles menores de los datos involucrados.

Ahora, desde la perspectiva de la codificación, tenemos muchos algoritmos que tienden a utilizar la redundancia estadística para comprimir, además de utilizar los formatos de onda sinusoidal como los DCT y los MDCT.

Sabemos que las pequeñas diferencias de color son más difíciles de percibir que los cambios de brillo. La imagen en un video o en un cuadro se representa con píxeles. estos píxeles a su vez se almacenan en forma de 1 ‘y 0 (puede ser una frecuencia común, etc. de ondas sinusoidales en los datos). La compensación en algoritmos con pérdidas es manipular estas pequeñas diferencias en los datos.

Referencia adicional: – Compresión de datos

Suponga que quiere empacar su ropa en su bolso. En el primer intento, intenta meter toda tu ropa en la bolsa y verás que queda algo de ropa. Luego, uno de tus amigos se acerca y dobla cada una de las prendas, ahora cabe más ropa en la bolsa. Un tercer amigo mira tu bolso y dice que tiene una mejor manera de guardar la ropa en el bolso que el otro amigo. Al probarlo, verá que ahora cabe más ropa en la bolsa que antes.

La compresión de datos es muy similar al escenario anterior. Se trata de doblar o representar mejor sus datos para que más datos quepan en un espacio dado o una cantidad dada de datos requiera mucho menos espacio del requerido.

Considere un algoritmo simple como, RLE o Run Length Encoding. Supongamos que los datos iniciales son

AAAAABBBBBCCCCC

Ahora RLE funciona reemplazando una serie de caracteres por el carácter y su longitud de ejecución. Así que ahora al aplicar esto obtenemos

A5B5C5

Que es mucho más pequeño que la cadena original. Del mismo modo, hay varios algoritmos como la codificación aritmética, Lempel-Ziv, etc., que representan los datos de una mejor manera, lo que reduce el tamaño de los datos iniciales. Generalmente los softwares como winzip usan una combinación de uno o más de estos algoritmos para comprimir datos

La compresión funciona en diferentes medios, no siempre se define simplemente como “Compresión” como una palabra.

Por ejemplo, una de las formas más comunes de compresión utiliza una lógica simple, por ejemplo, si intenta comprimir una imagen que tomó con un diseño simple como fondo, la imagen simplemente se almacena con el número de píxeles x el Color del fondo .

Ahora, cuando descomprime la imagen, se realiza el mismo cálculo para restaurar su imagen, sin pérdida y sin sentido, simplemente funciona sin problemas. Llamada codificación de longitud de ejecución, la estrategia se usa comúnmente en la mayoría de las aplicaciones de compresión.


Más allá de eso, muchos quieren aprender más sobre pérdidas y pérdidas como medios y tecnologías de compresión, ambas son realmente buenas, pero las aplicaciones pueden variar ampliamente, sin embargo, ambas se encuentran entre las principales tecnologías de compresión utilizadas en la mayoría de las plataformas de chat, incluido WhatsApp y en el gigante de las redes sociales Facebook .

Lectura adicional sobre Lossy y Lossless:

La respuesta de Palani Kumar a ¿Cuál es la técnica / algoritmo utilizado por mensajeros como WhatsApp y BBM para comprimir imágenes?

Supongo que está hablando de compresión sin pérdidas, que los datos se recuperan en el flujo de bytes exactamente como antes después de los procedimientos de compresión y descompresión. El software más famoso combinaba el algoritmo basado en LZ con un algoritmo de codificación de entropía. El algoritmo inicial LZ77 era bastante simple, sin embargo, los programadores habían hecho muchas variantes y usado muchos trucos en la implementación.

Aquí hay algunos algoritmos por palabras clave:

7-zip (LZMA): codificación de rango LZ77 +, con buscador de coincidencias de cadena hash o árbol binario, análisis óptimo, modal de contexto FSM para codificador de rango, preprocesador BCJ / BCJ2 en archivos ejecutables.

Zip / gzip / deflate: LZ77 con tamaño de diccionario de 32 KB + codificación Huffman

RAR todas las versiones: LZ77 + Huffman Coding, ventana de mayor tamaño.

Bzip2: BWT (también conocido como clasificación de bloques) + MTF + Codificación Huffman

LZ4 / LZF / Snappy / LZO / QuickLZ: Todas son variantes de LZ77.

Todos ellos fueron escritos inicialmente en C. Dado que la compresión de datos enfatiza el rendimiento, creo que C debería ser la mejor opción.

La compresión de texto se realiza generalmente codificando letras de uso frecuente, como ‘e’ para inglés, con las cadenas de bits más cortas posibles y codificando una menos usada con las cadenas restantes más largas.

Voy a explicar esto sin entrar en detalles técnicos.

Imagina tener un archivo de 1 byte. El archivo se almacenará en formato binario dentro de la computadora.
Suponga que la representación binaria de los datos internos del archivo viene dada por los siguientes 8 bits (1 byte): 11110000. Los bits dados son 4-1s y 4-0s. En lugar de solo ahorrar 11110000, ahorraremos 4-1 y 4-0, lo que ocupará una cantidad de espacio significativamente menor.

Puede leer más sobre la compresión de datos y sus algoritmos aquí

http://en.m.wikipedia.org/wiki/D

Por lo que he leído, creo que comprimir un archivo consiste en encontrar patrones en los caracteres y luego sustituirlos por algo más pequeño.

Por ejemplo, supongamos que desea comprimir una palabra doc de 1000 caracteres. Un algoritmo de compresión buscaría a través del archivo, haciendo un seguimiento de cada palabra encontrada. Cuando se encuentra con una palabra que ya realizó un seguimiento, en lugar de realizar un seguimiento de la misma palabra, puede hacer referencia a la palabra anterior y luego señalar la ubicación del duplicado encontrado. Repitiendo este proceso, eventualmente tendrá un documento más pequeño.
Este proceso también funciona a nivel de caracteres, por lo que cada letra repetida obtiene
Una referencia a la instancia inicial de la carta. Por supuesto, esto ahorra mucho más que el nivel de palabra, reduciendo el tamaño general del archivo.
HowStuffWorks “Cómo funciona la compresión de archivos” Este es un excelente artículo que explica el proceso.

La compresión de archivos es una técnica utilizada para reducir el tamaño de un archivo sin comprometer su calidad de datos. La compresión es de varios tipos dependiendo del tipo de archivo que queremos comprimir. Lo más común es la compresión de imágenes especialmente cuando se usa en sitios web. Cuando tomamos imágenes de cámaras de alta resolución, el tamaño de la imagen está en algunos MB, lo que no es bueno para un sitio web, ya que tomará mucho tiempo cargar la página con imágenes tan pesadas.

Cómo funciona la compresión de imágenes: un algoritmo toma series de datos (elementos de datos consecutivos con valores idénticos) y los almacena en un solo valor de datos y cuenta. Es el más adecuado para archivos gráficos simples, donde hay largos recorridos de elementos de datos idénticos.

Hay varias herramientas de compresión de imágenes en línea disponibles como Tinypng. Si está trabajando con un sitio web de Wordpess, tiene suerte ya que tiene varios complementos de compresión de imágenes para WordPress.