LZH es un formato de archivo de compresión de datos sin pérdida que lleva el nombre de Lempel-Ziv-Huffman, los algoritmos en los que se basa. Fue lanzado por primera vez en 1987 por Haruyasu Yoshizaki como una mejora sobre los formatos de compresión anteriores LZ77 y LZ78 desarrollados por Abraham Lempel y Jacob Ziv a fines de la década de 1970. LZH proporcionó índices de compresión más eficientes al tiempo que permitía una descompresión rápida.
Los algoritmos de compresión principales utilizados en LZH están basados en diccionarios, aprovechando los datos vistos anteriormente para codificar de forma más compacta los datos futuros. El codificador mantiene un búfer de ventana deslizante de los datos procesados más recientemente. Cuando se encuentran nuevos datos, el codificador busca la secuencia coincidente más larga en la ventana deslizante. Si se encuentra una coincidencia, los datos se codifican como una referencia a la posición y longitud de la ventana coincidente, en lugar de los datos literales. Esta referencia normalmente consume menos espacio que el contenido original.
LZ77, utilizado como base para LZH, tiene un bucle de codificación que se ve así: 1. Buscar en la ventana deslizante la coincidencia más larga con la entrada próxima 2. Salida (desplazamiento, longitud) par que se refiere a la coincidencia 3. Si no se encuentra ninguna coincidencia, generar un byte literal 4. Mover la ventana hacia adelante por la longitud de la coincidencia
En 1986, Terry Welch publicó un algoritmo LZW mejorado que adaptó el trabajo de LZ78. Utilizó números de índice en un diccionario de cadenas para lograr más densidad que LZ77. Al año siguiente, se lanzó LZH, incorporando el enfoque de diccionario deslizante LZ77 pero agregando la codificación Huffman en los símbolos LZ77 como un paso adicional para mejorar los índices de compresión.
La codificación Huffman asigna secuencias de bits cortas a símbolos de uso frecuente y secuencias más largas a símbolos raros. En LZH, los posibles símbolos son bytes literales, marcadores de fin de bloque y referencias coincidentes en el diccionario de ventana deslizante. El modelo de codificación Huffman se calcula de forma única para cada bloque de datos en función de la distribución de frecuencia de símbolos de ese bloque. A las referencias coincidentes más frecuentes se les asignan códigos de bits más cortos. Este paso de codificación de entropía se aplica después de la coincidencia con la ventana deslizante.
La descompresión analiza los códigos Huffman de longitud variable de la secuencia de entrada, traduciéndolos de nuevo a bytes literales y referencias coincidentes. Las referencias se resuelven mirando hacia atrás en el búfer de ventana en los datos decodificados, copiando la coincidencia en la salida. La ventana se desliza hacia adelante después de cada símbolo. La descompresión es rápida, ya que no se requiere búsqueda de coincidencias.
Los archivos LZH contienen una serie de bloques, cada uno comprimido independientemente con este modelo LZ77+Huffman. Los bloques separados permiten el acceso aleatorio y la recuperación de errores. Cada bloque comienza con un encabezado que almacena las tablas de codificación Huffman necesarias para decodificar los datos de ese bloque.
El formato LZH estándar permite un tamaño de ventana deslizante de 13 bits, u 8192 bytes. La ventana normalmente se inicializa con todos los bytes cero al inicio de cada bloque. No se utiliza un diccionario preestablecido, solo datos previamente comprimidos. Las referencias coincidentes están limitadas a una longitud máxima de 256 bytes.
Nelson H.F. Beebe extendió LZH para admitir tamaños de ventana deslizante arbitrariamente grandes, llamando a su formato LZHXa. Los tamaños de ventana están restringidos a potencias de 2, siendo comunes 2^15 (32768) y 2^16 (65536) bytes. Aumentar la ventana mejora la compresión a medida que se buscan más datos del historial, a costa de una codificación más lenta y un mayor uso de memoria.
LZH incluye sumas de comprobación para validar la integridad de los datos. Cada bloque termina con un código CRC de 16 bits. Los archivos multiarchivo almacenan un CRC adicional para cada archivo completo. La mayoría de las implementaciones utilizan CRC-16 con el polinomio x^16 + x^15 + x^2 + 1, pero algunas utilizan CRC-16-CCITT.
Los archivos LZH comprimidos utilizan convencionalmente la extensión de archivo .lzh. El formato tuvo una mayor adopción en Japón, con una popularidad máxima a principios de la década de 1990, ya que competía con ZIP y ARJ. Evolucionó un estándar informal conocido como LHA, utilizado por los populares archivadores LArc y LHarc. Agregó soporte para comentarios, marcas de tiempo, contraseñas y archivos multiarchivo.
Las principales ventajas de LZH eran sus índices de compresión más altos en comparación con ZIP, además de una descompresión rápida. Sin embargo, a mediados de la década de 1990, ZIP ganó popularidad y desplazó a la mayoría de los demás formatos. La rápida adopción de ZIP como estándar en Windows, además del soporte de bibliotecas y herramientas multiplataforma, lo llevó a dominar el mercado de compresión sin pérdida.
Hoy en día, LZH rara vez se utiliza fuera de Japón y el este de Asia. Los nuevos formatos de compresión como bzip2, LZMA y otros ofrecen índices de compresión significativamente mejores. Algunas aplicaciones heredadas aún pueden encontrar archivos .lzh, pero se recomiendan ZIP, 7z o xz modernos para el archivo. Existen herramientas de código abierto como lhasa para extraer archivos .lzh antiguos.
En resumen, LZH combinó de forma innovadora la codificación de diccionario Lempel-Ziv con la reducción de bits Huffman para lograr una compresión de última generación cuando se introdujo. Tuvo una breve adopción, especialmente en Japón, antes de ser superado por el estándar ZIP. Pero jugó un papel importante en la historia de la compresión de datos y el desarrollo de formatos de archivo modernos. LZH mostró técnicas como diccionarios de ventanas deslizantes y codificación de entropía de símbolos que siguen siendo fundamentales para la forma en que comprimimos datos de manera eficiente.
La compresión de archivos es un proceso que reduce el tamaño de los archivos de datos para un almacenamiento o transmisión eficiente. Utiliza varios algoritmos para condensar los datos al identificar y eliminar redundancias, lo que a menudo puede disminuir considerablemente el tamaño de los datos sin perder la información original.
Hay dos tipos principales de compresión de archivos: sin pérdida (lossless) y con pérdida (lossy). La compresión sin pérdida permite que los datos originales se reconstruyan perfectamente a partir de los datos comprimidos, lo cual es ideal para archivos donde cada bit de datos es importante, como archivos de texto o bases de datos. Ejemplos comunes incluyen los formatos de archivo ZIP y RAR. Por otro lado, la compresión con pérdida elimina los datos menos importantes para reducir más significativamente el tamaño del archivo, a menudo se utiliza en archivos de audio, video e imagen. JPEG y MP3 son ejemplos donde alguna pérdida de datos no degrada sustancialmente la calidad perceptual del contenido.
La compresión de archivos es beneficiosa de múltiples maneras. Conserva espacio de almacenamiento en dispositivos y servidores, reduciendo costos y mejorando la eficiencia. También acelera los tiempos de transferencia de archivos a través de redes, incluido el internet, lo cual es especialmente valioso para archivos grandes. Además, los archivos comprimidos pueden agruparse en un solo archivo de archivo, lo que ayuda en la organización y facilita el transporte de múltiples archivos.
Sin embargo, la compresión de archivos sí tiene algunas desventajas. El proceso de compresión y descompresión requiere recursos computacionales, lo que podría ralentizar el rendimiento del sistema, especialmente para archivos más grandes. Además, en el caso de la compresión con pérdida, se pierden algunos datos originales durante la compresión, y la calidad resultante puede no ser aceptable para todos los usos, especialmente para aplicaciones profesionales que exigen alta calidad.
La compresión de archivos es una herramienta crítica en el mundo digital de hoy. Mejora la eficiencia, ahorra espacio de almacenamiento y disminuye los tiempos de descarga y carga. Sin embargo, viene con su propio conjunto de desventajas en términos de rendimiento del sistema y riesgo de degradación de la calidad. Por lo tanto, es esencial tener en cuenta estos factores para elegir la técnica de compresión correcta para las necesidades de datos específicas.
La compresión de archivos es un proceso que reduce el tamaño de un archivo o archivos, típicamente para ahorrar espacio de almacenamiento o acelerar la transmisión a través de una red.
La compresión de archivos funciona identificando y eliminando la redundancia en los datos. Utiliza algoritmos para codificar los datos originales en un espacio menor.
Los dos tipos principales de compresión de archivos son la compresión sin pérdida y la compresión con pérdida. La compresión sin pérdida permite restaurar perfectamente el archivo original, mientras que la compresión con pérdida permite una reducción de tamaño más significativa a costa de alguna pérdida en la calidad de los datos.
Un ejemplo popular de una herramienta de compresión de archivos es WinZip, que admite varios formatos de compresión incluyendo ZIP y RAR.
Con la compresión sin pérdida, la calidad permanece sin cambios. Sin embargo, con la compresión con pérdida, puede haber una disminución notable en la calidad, ya que elimina datos menos importantes para reducir de manera más significativa el tamaño del archivo.
Sí, la compresión de archivos es segura en términos de integridad de datos, especialmente con la compresión sin pérdida. Sin embargo, como en todos los archivos, los archivos comprimidos pueden ser objeto de malware o virus, por lo que siempre es importante tener un software de seguridad de confianza en funcionamiento.
Casi todos los tipos de archivos se pueden comprimir, incluyendo archivos de texto, imágenes, audio, video y archivos de software. Sin embargo, el nivel de compresión alcanzable puede variar significativamente entre los tipos de archivos.
Un archivo ZIP es un tipo de formato de archivo que utiliza compresión sin pérdida para reducir el tamaño de uno o varios archivos. Varios archivos en un archivo ZIP se agrupan efectivamente en un solo archivo, lo que también facilita la compartición.
Técnicamente, sí, aunque la reducción de tamaño adicional podría ser mínima o incluso contraproducente. Comprimir un archivo ya comprimido a veces aumenta su tamaño debido a los metadatos agregados por el algoritmo de compresión.
Para descomprimir un archivo, generalmente se necesita una herramienta de descompresión o descompresión, como WinZip o 7-Zip. Estas herramientas pueden extraer los archivos originales del formato comprimido.