- 1
Los algoritmos de compresión de datos se pueden definir como el proceso de reducción de los tamaños de los archivos a la hora de conservar los mismos o similares hasta cierto punto de los datos. Esto se hace mediante la realización de la eliminación de los datos innecesarios o hacer los datos de nuevo para una mayor eficiencia.
A la hora de comprimir, se tiene la opción de elegir entre métodos con o sin pérdidas. Si hablamos del método con pérdidas, éste borra permanentemente los datos. Por otro lado, el método sin pérdidas cuida tus datos originales. El tipo que elijas depende de la calidad que requieras para tus archivos.
En este artículo, encontrará una mezcla de algoritmos de compresión de datos sin pérdidas y algoritmos de compresión de imágenes y vídeos basados en el aprendizaje profundo.
Los algoritmos de compresión de datos sin pérdidas son normalmente seres utilizados para realizar la función de archivo o cualquier otra función de alta calidad. Estos algoritmos de compresión de datos permiten realizar una reducción del tamaño de los archivos. También garantizan que los archivos se puedan restaurar completamente en caso de que sea necesario hacerlo.
Table of Contents
- LZ77
- LZR
- LZSS
- Deflate
- LZMA
- LZMA2
- Multi-Layer Perceptron (MLP)- Based Compression
- Dee Coder- Deep Neural Network Based Video Compression
- Red neuronal convolucional (CNN) – Compresión basada
- Generative Adversarial Network (GAN)- Based Compression
- Predicción por coincidencia parcial (PPM)
- Codificación de longitud de ejecución (RLE)
- bzip2
- Codificación Huffman
- ZStandard
- Conclusión
LZ77
LZ77 se anunció en 1977 y se denominó como la base de muchos otros algoritmos de compresión sin pérdidas. Normalmente utiliza el método de «Ventana deslizante». En esta metodología, se ocupa de un diccionario que hace uso de triples para representar:
- Offset- Se puede denominar como el inicio real de la frase y el comienzo del archivo.
- Run-length-Se define como la cantidad de los caracteres que le ayudan en la fabricación de una frase.
- Caracteres de desviación-Son los comercializadores que indican una nueva frase.
Incluye una indicación de que la frase utilizada es completamente igual a la frase original y también define si hay algún carácter diferente.
Como va a analizar un archivo, el diccionario se actualiza dinámicamente para el reflejo de los contenidos de datos comprimidos y el tamaño también.
LZR
LZR fue desarrollado y anunciado en el año 1981. Michael Rodeh lo anunció y lo modificó posteriormente. Se puede utilizar como alternativa principal para el algoritmo de compresión de datos LZ77, pero también tiene la opción de utilizarlo para cualquier desplazamiento dentro del archivo. Si no lo utiliza de forma lineal, entonces necesita una cantidad significativa de almacenamiento en memoria. Esta condición hace que LZ77 sea una mejor opción de uso. Este algoritmo de compresión de datos es sencillo de implementar y tiene el potencial de un rendimiento muy alto cuando se implementa en el hardware.
Es el algoritmo de compresión de datos Unix ampliamente utilizado utilidad comprimir y se utiliza en el formato de imagen GIF. Se convirtió en el primer algoritmo de compresión de datos ampliamente utilizado en los ordenadores. Un gran archivo de texto en inglés puede ser típicamente comprimido de LZW a aproximadamente la mitad de su tamaño original.
LZSS
LZSS significa Lempel Ziv Storer Szymanski y fue desarrollado y anunciado en el año 1982. Se trata de un algoritmo de compresión de datos que mejora el LZ77. Este proceso de compresión se realiza incluyendo un método que vigilará si una sustitución disminuye el tamaño del archivo. Si no disminuye, entonces la entrada se dejará en su forma original. Tampoco prefiere el uso de caracteres desviados, y sólo prefiere utilizar pares de longitudes de desplazamiento.
Este algoritmo se utiliza principalmente para archivar los ficheros en diferentes formatos como RAR o ZIP, o para la compresión de datos de red.
Se puede denominar como una técnica de codificación de diccionario. LZSS trata de sustituir una cadena de símbolos por una referencia a una ubicación de diccionario de la misma cadena. La diferencia clave entre LZ77 y LZSS es que en LZ77, la referencia del diccionario podía ser más larga que la cadena que sustituía. En LZSS, tales referencias se omiten si la longitud es menor que el punto de «equilibrio».
Deflate
Deflate es un formato de archivo de algoritmo de compresión de datos sin pérdidas que hace uso de una combinación de LZSS y codificación Huffman. Fue diseñado por Phil Katz en el año 1993. La codificación Huffman también es un algoritmo que se desarrolló en el año 1952. Se puede definir como un algoritmo de codificación de entropía que le ayuda en la asignación de su código basado en la frecuencia del carácter.
Katz también diseñó el algoritmo original que se utiliza para construir flujos Deflate. Como se indica en el documento RFC, se pensó que el algoritmo que produce los archivos Deflate podía implementarse de manera que no estuviera cubierto por patentes. Esto condujo al uso generalizado del mismo, además del formato de archivo ZIP que fue el objetivo principal de Katz para diseñarlo. La patente ya no está disponible.
LZMA
LZMA significa el algoritmo de cadena de Markov de Lempel Ziv y fue diseñado y lanzado en el año 1998. También se puede decir que es una modificación del LZ77. Esta modificación se realizó para el archivador -Zip con formato .7z. Se utiliza el método de compresión en cadena que implementa el LZ77 modificado a nivel de bits en lugar de bytes. La salida que aparece será procesada adicionalmente usando codificación aritmética para realizar más compresión.
El rendimiento de otros pasos de compresión depende de la implementación exacta. Este algoritmo de compresión de datos utiliza un esquema de compresión por diccionario muy similar al algoritmo LZ77 que fue publicado por Abraham Lempel y Jacob Ziv en el año 1977. También cuenta con una alta relación de compresión y un tamaño de diccionario de compresión variable. Aunque sigue manteniendo la velocidad de descompresión muy similar a otros algoritmos de compresión comúnmente utilizados.
LZMA2
LZMA2 fue diseñado y publicado en el año 2009. También se puede definir como la modificación de LZMA. Hace que el LZMA mejore su rendimiento con mayores capacidades de multihilo. LZMA2 también le proporciona un manejo mejorado de los datos incompresibles. Es un formato contenedor simple que puede incluir tanto datos sin comprimir como datos LZMA y eso también con múltiples parámetros de codificación LZMA diferentes.
LZMA2 soporta compresión y descompresión multihilo arbitrariamente escalable y compresión eficiente de datos que son parcialmente incompresibles. Sin embargo, puede tener algunos problemas de seguridad y puede ser inseguro y menos eficiente que LZMA. En palabras simples, esto puede ser útil para usted, pero sí no es tan seguro en comparación con LZMA.
Multi-Layer Perceptron (MLP)- Based Compression
MLP se puede definir como una tecnología que utiliza múltiples capas de neuronas para la entrada, el procesamiento y dar datos de salida. Se puede implementar para las tareas de reducción de dimensión y también de compresión de datos. El algoritmo basado en MLP fue desarrollado por primera vez en el año 1988 y se une a los procesos ya existentes de:
- Codificación binaria- codificación estándar de dos símbolos.
- Cuantización- problemas de entrada de un conjunto continuo a un conjunto discreto.
- Transformación del dominio espacial – cambios de los datos píxel a píxel.
Para la determinación del código binario óptimo, el algoritmo MLP utiliza las salidas de los procesos anteriores en una red neuronal de descomposición.
Además, este algoritmo fue modificado con técnicas intuitivas que permitieron una aproximación precisa de los datos completamente basada en los datos vecinos a través de la retropropagación. Puede ser muy útil para usted en la compresión de datos de imagen y vídeo.
Dee Coder- Deep Neural Network Based Video Compression
Deep Coder se define como un marco basado en la red neuronal convolucional (CNN). Esto hace que la representación de una alternativa a las técnicas de compresión de vídeo que hemos estado utilizando tanto tiempo. Para las señales predictivas y residuales diferentes Redes Neuronales Convolucionales (CNN) son traídas por este modelo.
Realiza la codificación de los mapas de características en el flujo binario con el uso de cuantificación escalar y un algoritmo de compresión de archivos muy antiguo y tradicional llamado codificación Huffman. Se afirma que este modelo es capaz de proporcionar un rendimiento superior en comparación con el conocido estándar de codificación de vídeo H.264/AVC.
Red neuronal convolucional (CNN) – Compresión basada
Las CNN se definen como redes neuronales de diferentes capas. Se utiliza principalmente para el reconocimiento de imágenes y la detección de la característica. En el momento en que se aplica a la compresión, estas redes hacen uso de la convolución para calcular la conexión entre los píxeles vecinos. Si lo comparamos con los algoritmos basados en MLP, las CNN muestran mejores resultados de compresión que ellos.
Esto también le proporciona un mejor rendimiento de superresolución y reducción de artefactos. Además de esto, los algoritmos de compresión de datos basados en CNN realizan mejoras en la calidad de las imágenes JPEG. Esto se hace mediante la reducción de la relación señal/ruido de pico y la similitud estructural.
La compresión basada en CNN también puede conseguir el rendimiento del estándar High-Efficiency Video Coding. Esto se hace con el uso de la estimación de la entropía. También puede ser muy útil para usted en la realización de la compresión de archivos.
Generative Adversarial Network (GAN)- Based Compression
GANs se puede definir como una alternativa de redes neuronales que hacen uso de dos redes que compiten. Esto se hace para la producción de análisis y predicciones más precisas. En el año 2017 se desarrollaron por primera vez algoritmos basados en GAN. Estos algoritmos de compresión de datos pueden comprimir los archivos más de dos veces y media más pequeños en comparación con los métodos tradicionales comúnmente utilizados, como JPEG o WebP.
Los algoritmos basados en GAN pueden utilizarse para la compresión en tiempo real con el procesamiento paralelo que se utiliza conjuntamente. Este algoritmo funciona ya que comprime las imágenes por completo basándose en las características más coincidentes.
Cuando se realiza la decodificación, se reconstruyen las imágenes basándose en las predicciones realizadas por estas características. Si lo comparamos con la compresión basada en CNN, la compresión basada en GAN producirá imágenes de muy alta calidad por la eliminación de la pérdida adversarial.
Predicción por coincidencia parcial (PPM)
PPM es una técnica adaptativa de compresión estadística de datos basada en el modelado y la predicción del contexto. Estos modelos utilizan un conjunto de símbolos anteriores en el flujo de símbolos sin comprimir para predecir el siguiente símbolo en el flujo. Los algoritmos PPM también pueden utilizarse para agrupar los datos en conjuntos predichos en el análisis de conglomerados.
El número de símbolos anteriores, n, determina el orden del modelo PPM que se denota como PPM(n).También existen variantes no limitadas en las que el contexto no tiene limitaciones de longitud y se denotan como PPM. Si no se puede hacer una predicción basada en todos los n símbolos del contexto, se intenta una predicción con n – 1 símbolos. Este proceso se repite hasta que se encuentra una coincidencia o no quedan más símbolos en el contexto. En ese momento, se realiza una predicción fija.
Las implementaciones de la compresión PPM varían mucho en otros detalles. La selección real de símbolos se suele registrar mediante codificación aritmética, aunque también es posible utilizar la codificación Huffman o incluso algún tipo de técnica de codificación de diccionario.Codificación de longitud de ejecución (RLE)
RLW es una forma de compresión de datos sin pérdidas en la que las ejecuciones de datos (secuencias en las que el mismo valor de datos aparece en muchos elementos de datos consecutivos) se almacenan como un único valor de datos y un recuento, en lugar de como la ejecución original. Esto es más útil en los datos que contienen muchas ejecuciones de este tipo.
Por ejemplo, imágenes gráficas simples como iconos, dibujos lineales, el Juego de la Vida de Conway y animaciones. No es útil con archivos que no tienen muchas ejecuciones, ya que podría aumentar mucho el tamaño del archivo.
RLE también puede usarse para referirse a un primer formato de archivo gráfico soportado por CompuServe para comprimir imágenes en blanco y negro, pero fue ampliamente suplantado por su posterior Formato de Intercambio Gráfico (GIF). RLE también se refiere a un formato de imagen poco utilizado en Windows 3.x, con la regla de extensión, que es un Run Length Encoded Bitmap, utilizado para comprimir la pantalla de inicio de Windows 3.x.
bzip2
bzip2 es un programa de compresión de datos gratuito y de código abierto que utiliza el algoritmo Burrows-Wheeler. Sólo comprime archivos individuales y no es un archivador de archivos. Está desarrollado por Julian Seward y mantenido por Federico Mena. Seward hizo la primera versión pública de bzip2, la 0.15, en julio de 1996. La estabilidad y la popularidad del compresor crecieron durante los años siguientes, y Seward lanzó la versión 1.0 a finales de 2000.
Tras un paréntesis de nueve años de actualizaciones para el proyecto desde 2010. El 4 de junio de 2019, Federico Mena aceptó el mantenimiento del proyecto bzip2. bzip2 comprime datos en bloques de tamaño entre 100 y 900 kB.
Utiliza la transformación Burrows-Wheeler para convertir las secuencias de caracteres que se repiten con frecuencia en cadenas de letras idénticas. A continuación, aplica la transformación de avance y la codificación Huffman. El antecesor de bzip2, bzip, utilizaba la codificación aritmética en lugar de la Huffman. El cambio se hizo debido a una restricción de patente de software.
Codificación Huffman
El código Huffman es un tipo particular de código prefijo óptimo que se utiliza comúnmente para la compresión de datos sin pérdidas. El proceso de encontrar o utilizar dicho código procede a utilizar la codificación Huffman, un algoritmo desarrollado por David A. Huffman mientras era estudiante de doctorado en el MIT, y publicado en el artículo de 1952 «A Method for the Construction of Minimum-Redundancy Codes».
La salida del algoritmo de Huffman puede verse como una tabla de códigos de longitud variable para codificar un símbolo fuente (como un carácter en un archivo). El algoritmo obtiene esta tabla a partir de la probabilidad o frecuencia de ocurrencia estimada (peso) para cada valor posible del símbolo fuente.
Como en otros métodos de codificación de entropía, los símbolos más comunes se representan generalmente utilizando menos bits que los símbolos menos comunes. El método de Huffman puede ser implementado eficientemente. Encuentra un código en tiempo lineal al número de pesos de entrada si estos pesos están ordenados.
ZStandard
Zstandard (o zstd) es un algoritmo de compresión de datos sin pérdidas desarrollado por Yann Collet en Facebook. Zstd es la implementación de referencia en C. La versión 1 de esta implementación fue liberada como software libre el 31 de agosto de 2016.
Zstandard fue diseñado para dar una relación de compresión comparable a la del algoritmo DEFLATE (desarrollado en 1991 y utilizado en los programas ZIP y gzip originales), pero más rápido, especialmente para la descompresión. Se puede ajustar con niveles de compresión que van desde el negativo 5 (el más rápido) hasta el 22 (el más lento en velocidad de compresión, pero el mejor ratio de compresión).Zstd en su nivel máximo de compresión da una relación de compresión cercana a LZMA, LZAHM y PPM. Su rendimiento es mejor que el de LZA o bzip2. Zstandard alcanza la actual frontera de Pareto, ya que descomprime más rápido que cualquier otro algoritmo actualmente disponible con una relación de compresión similar o mejor
Los diccionarios pueden tener un gran impacto en la relación de compresión de los archivos pequeños, por lo que Zstandard puede utilizar un diccionario de compresión proporcionado por el usuario. También ofrece un modo de entrenamiento, capaz de generar un diccionario a partir de un conjunto de muestras.
Conclusión
Estos algoritmos de compresión de datos le ayudarán a optimizar el tamaño del archivo. Diferentes tipos de algoritmos de compresión de datos le proporcionarán diferentes resultados. Sin embargo, si no encuentra el algoritmo adecuado aquí, puede echar un vistazo a esta guía y afinar su búsqueda. No hay escasez de algoritmos, pero debes ser específico cuando busques el algoritmo adecuado para tu proyecto.
Espero que este artículo te haya sido útil para elegir el mejor algoritmo de compresión de datos según tus necesidades. Gracias por leer este artículo. También puede consultar los mejores algoritmos de encriptación y hashing.
Manténgase en sintonía
00voteCalificación del artículo.