¿Cuál es el algoritmo de compresión de texto más utilizado en la industria?

desinflar

deflate es el algoritmo utilizado en los formatos de archivo comprimido zip y gzip ( .gz ), internamente en documentos de Office como .docx y .xlsx , archivos Java ( .jar ) y en páginas web comprimidas a través de HTTP. El formato de imagen .png utiliza un algoritmo de predicción de píxeles seguido de la compresión de los errores de predicción residuales con desinflado.

desinflar no es el mejor algoritmo de compresión. En la Prueba comparativa de compresión de texto grande, gzip y zip se clasifican en 142 y 143 de 195 por relación de compresión. Muchos de los programas de mayor rango también son más rápidos. Entonces te estarás preguntando por qué es tan popular. Es porque ha existido durante mucho tiempo (desde PKZIP en 1993), no está gravado por patentes, y hay programas gratuitos y de código abierto (gzip, Info-Zip) y bibliotecas (zlib). El formato desinflado es un estándar de Internet documentado en RFC 1951. Aunque muchos algoritmos nuevos y mejores también son gratuitos y están bien documentados, los estándares de software tardan mucho tiempo en ser ampliamente aceptados.

deflate utiliza LZ77. Se comprime reemplazando cadenas duplicadas con punteros a ocurrencias anteriores. Los literales, las compensaciones de coincidencia y las longitudes de coincidencia se codifican luego con Huffman utilizando tablas de Huffman que se transmiten junto con los datos comprimidos. La razón de la baja relación de compresión es que las compensaciones de coincidencia están limitadas a 32 KB, por lo que podría ejecutarse en computadoras de principios de los años 90 con solo 64 KB de memoria. Los formatos más nuevos como RAR, 7Z, LZ4, ZPAQ y ZSTD permiten compensaciones más grandes pero requieren una memoria al menos igual al desplazamiento máximo para descomprimir.

Solo en bytes de datos (sin comprimir), apuesto a que es gzip. Más del 70% de todo el tráfico HTTP se comprime gzip entre el servidor y el navegador (Estadísticas de uso de la compresión Gzip para sitios web, julio de 2017), que es una cantidad increíble de bytes por año.

También se usa en otros entornos; Sé que muchos datos bioinformáticos lo usan. Considere SAM (formato de archivo), que es la forma habitual de almacenar las lecturas individuales que obtiene de una máquina de secuenciación; esos son simples archivos de texto legibles por humanos. Se comprimen bien, por lo que almacenarlos como .sam.gz es bastante común; gzip es estándar en las máquinas linux que la gente suele usar para trabajar en estos archivos. No se comprime tan bien como bzip o xz, pero es mucho más rápido y se acerca lo suficiente. Si no es lo suficientemente compacto o rápido, puede usar el formato BAM mucho más compacto (Mapa de alineación binaria), que es un formato binario … comprimido con gzip.

El usuario de Quora menciona zlib, que generalmente significa gzip: el programa gzip usa zlib internamente para producir datos en el formato gzip .

Sin embargo, también puede usar zlib para producir datos comprimidos en formatos que no son gzip; el formato de imagen PNG usa la compresión DEFLATE pero no es gzip; Muchas herramientas que pueden leer y escribir imágenes PNG usan zlib.

Cualquiera de las muchas variaciones de Lempel-Ziv-Huffman. No sé en ningún lugar que pueda buscar estadísticas precisas sobre el asunto, pero supongo que la implementación de zlib es probablemente una de las más utilizadas, si no la más. Utiliza el algoritmo DEFLATE.

More Interesting

Como desarrollador web full stack con 1 año de experiencia, ¿sería beneficioso para mí aprender algoritmo y estructura de datos?

¿Algún consejo para estudiar la complejidad del espacio para programar entrevistas? ¿Cuáles son algunos buenos recursos para aprender sobre la complejidad del espacio?

¿Cuál es el vínculo entre los algoritmos de optimización y las distribuciones de probabilidad?

¿Cuáles son las aplicaciones del algoritmo de la Torre de Hanoi?

¿Cuál es la diferencia entre las estructuras de datos de programación C y las estructuras de datos de programación Java?

¿Cómo implementaría el aumento de precios utilizando estructuras de datos?

¿Qué es el algoritmo de transformación de Burrows-Wheeler y cómo se usa en aplicaciones del mundo real?

¿Qué método es el más adecuado para resolver problemas de programación de enfermería, programación dinámica o algoritmos genéticos, y por qué?

¿Es este código de búsqueda binario válido? Si es así, ¿entonces cómo?

¿Cómo debería resolver mejor los problemas de programación?

¿Existe un mejor patrón para aprender algoritmos de programación?

¿Cómo verifico si un número binario es divisible por decir 'n'?

¿Los algoritmos están optimizados para discos duros normales * no * optimizados para unidades de estado sólido?

Cómo crear un sistema de clasificación que dependa de tres variables (nivel, resultado y tiempo) cuanto más altas sean las dos primeras, mejor, mientras que por un tiempo, un valor menor es mejor

¿Las estructuras de datos son más importantes o es el lenguaje?