Técnicas de compresión:
* Compresión sin pérdidas: Este tipo de compresión garantiza una reconstrucción perfecta de los datos originales después de la descompresión. Es crucial para los archivos donde incluso un poquito de pérdida de datos es inaceptable (por ejemplo, documentos de texto, código fuente, hojas de cálculo). Los métodos comunes incluyen:
* Compresión basada en diccionario (LZ77, LZ78, LZW): Estos algoritmos identifican secuencias repetidas de bytes (o caracteres) dentro de los datos y los reemplazan con referencias más cortas. Piense en ello como crear un diccionario de frases comunes y usar códigos para representarlas. Los ejemplos incluyen GZIP y ZIP (que a menudo usan una combinación de métodos).
* Codificación de Huffman: Este método estadístico asigna códigos más cortos a símbolos más frecuentes (bytes o caracteres) y códigos más largos a los menos frecuentes. Es muy efectivo para archivos de texto donde ciertos caracteres aparecen con mucha más frecuencia que otros.
* codificación aritmética: Similar a la codificación de Huffman, pero en lugar de asignar códigos de longitud fija, asigna códigos fraccionales, lo que lleva a relaciones de compresión ligeramente mejores.
* Transformación de los cuentos de madriguera (bwt): Esta técnica reorganiza los datos para mejorar la efectividad de otros métodos de compresión como la codificación de longitud de ejecución (RLE). A menudo se usa junto con la transformación de movimiento hacia adelante (MTF) y la codificación de Huffman (como se ve en BZIP2).
* Mezcla de contexto: Esta es una técnica más avanzada donde el algoritmo de compresión tiene en cuenta el contexto que rodea cada byte/carácter al elegir un código. Esto ayuda a explotar redundancias complejas que otros métodos pueden perder.
* Compresión con pérdida: Este tipo de compresión sacrifica algunos datos para lograr relaciones de compresión más altas. Es aceptable para datos donde una menor pérdida de calidad es tolerable (por ejemplo, imágenes, audio, video). Los métodos comunes incluyen:
* jpeg (imágenes): Utiliza la transformación de coseno discreta (DCT) para reducir la cantidad de datos necesarios para representar una imagen.
* mp3 (audio): Utiliza la codificación perceptiva para eliminar los sonidos que probablemente estarán enmascarados por otros sonidos.
* mpeg (video): Utiliza varias técnicas como la compensación de movimiento y el DCT para comprimir el video de manera eficiente.
El proceso de compresión/descompresión:
1. Análisis: El compresor analiza los datos de entrada para identificar patrones y redundancias. Este análisis es específico del algoritmo.
2. Transformación: Los datos se transforman según el algoritmo elegido. Esto podría implicar reorganizar bytes, crear diccionarios o aplicar transformaciones matemáticas.
3. Codificación: Los datos transformados se codifican en una representación más compacta utilizando códigos (códigos de Huffman, códigos aritméticos, etc.). Los metadatos sobre el método de compresión utilizado a menudo se incluyen.
4. Almacenamiento/transmisión: Los datos comprimidos se almacenan en un archivo o se transmiten a través de una red.
5. decodificación: El descompresor recibe los datos comprimidos e invierte el proceso de codificación.
6. Transformación inversa: El descompresor aplica la inversa de la transformación utilizada durante la compresión.
7. Reconstrucción: Para la compresión sin pérdidas, los datos originales se reconstruyen perfectamente. Para la compresión con pérdida, se reconstruye una aproximación cercana de los datos originales.
Software y hardware:
Varias herramientas de software (como `GZIP`,` ZIP`, `7-ZIP`,` BZIP2`) y las bibliotecas implementan estos algoritmos. Las CPU modernas a menudo tienen instrucciones que aceleran ciertas operaciones de compresión, y el hardware especializado (como los coprocesadores de compresión) puede acelerar significativamente el proceso para archivos muy grandes. Los proveedores de almacenamiento en la nube también emplean técnicas de compresión optimizadas a escala.