Mejor respuesta
Si por «mejor» te refieres a la relación de compresión, entonces de acuerdo con Punto de referencia de compresión de texto grande es CMIX. El único problema es que necesita una computadora con 32 GB de memoria para ejecutarlo. Y luego tomará 4 días comprimir o descomprimir 1 GB de texto.
Como la mayoría de los programas mejor clasificados, CMIX usa preprocesamiento de diccionario y mezcla de contexto estilo PAQ. El preprocesador reemplaza palabras con símbolos de 1 a 3 bits de un diccionario y realiza otro procesamiento, como reemplazar letras mayúsculas con un símbolo especial y el símbolo en minúscula correspondiente. También puede analizar prefijos y sufijos comunes.
Un modelo de contexto toma un contexto (por ejemplo, los últimos n bits) y adivina una probabilidad p que el siguiente bit será un 0 o 1. El resultado se envía a un codificador aritmético, que codifica el bit muy cerca del límite de Shannon de log2 1 / p bits. Por lo tanto, la relación de compresión depende completamente de qué tan bien se calcule p . Un algoritmo de mezcla de contextos hace predicciones muy precisas al combinar las predicciones de muchos modelos independientes. CMIX utiliza varios cientos de modelos, por lo que requiere tanto tiempo y memoria. La razón por la que hay tantos modelos es que existen muchos contextos posibles diferentes, muchas formas de convertir un contexto en una predicción, muchas formas de actualizar el modelo y muchas formas de combinar adaptativamente las predicciones de otros modelos y seleccionar los mejores utilizando una jerarquía de mezcladores. Los mezcladores de contexto prácticos pueden usar de 2 a 20 modelos, sacrificando algo de compresión por simplicidad y facilidad de uso.
Los mejores compresores se acercan a comprender el texto. Modelan la estructura léxica, semántica y gramatical del idioma. Por ejemplo, el diccionario se organiza agrupando palabras relacionadas, como madre con padre y lunes con martes . Esto da como resultado códigos de diccionario que difieren solo en los bits bajos. Luego, algunos de los modelos de contexto eliminarán los bits bajos, lo que permitirá al compresor predecir Vi a mi padre el lunes después de haber visto Vi a mi madre el martes .
Los detalles técnicos pueden ser bastante complicados. Si está interesado en obtener más información, consulte Explicación de la compresión de datos .
Respuesta
Suponiendo que está hablando de sin pérdidas compresión (los textos se pueden comprimir con pérdida con lenguaje SMS, por ejemplo), es bien sabido que no se puede comprimir sin pérdida «cualquier» archivo binario. En otras palabras, se incrementará el tamaño de algunos archivos. Esto se debe a los archivos de encabezado del codificador y las matemáticas básicas de las biyecciones imposibles entre [0, …, N] y [0, …, N-1], o el principio de casillero de Dirichlet (Schubfachprinzip). Consulte http://en.wikipedia.org/wiki/Pigeonhole\_principle
Como se dijo antes, «mejor» generalmente se refiere a una relación de compresión promedio @ Sam-Jp. El juego de caracteres de los textos (por ejemplo, ascii de 7 u 8 bits es importante) y su tipo también es importante. La «mejor compresión» en archivos de texto escritos en lenguaje humano puro se comporta de manera diferente en archivos postscript, rtf, doc o incluso pdf de impresora que contienen texto, ya que algunos formatos ya encapsulan la compresión. En consecuencia, la «mejor» relación de compresión depende del contenido de la base de datos, la homogeneidad y la tipología de los archivos de texto, como se ve en la compresión de texto en inglés en el enlace @ Igor-Carron: http://www.maximumcompression.com/data/text.php
La velocidad en Jonathan-Hseu también es muy importante. Dependiendo de su aplicación (desde el archivado hasta las interacciones de la base de datos @ Daniel-Lemire), uno se enfoca en la velocidad de compresión o descompresión (típicamente comprimir una vez, descomprimir muchas), o ambas.
Pero otras características pueden evaluarse como bueno, especialmente con la llegada de enormes conjuntos de datos y diversos sistemas de adquisición: -rendimiento de acceso aleatorio o capacidad de búsqueda en archivos comprimidos -resistencia al error (resistencia a bits corruptos) -capacidad en línea, es decir, poder comprimir eficientemente el flujo de datos tal como viene – compresión de textos estructurados no solo en un orden ráster sino en árboles, gráficos -baja complejidad o eficiencia energética del codificador, o decodificador, o ambos -posible paralelización -posibilidad de codificación distribuida (trabajo de compresión compartido en diferentes nodos de una red)
Eventualmente, incluso para el texto, uno puede pensar fuera del cuadro sin pérdidas. Y volvemos a los SMS citados anteriormente, donde el significado es importante, pero tal vez no la ortografía correcta, ver p. Ej.Kaufman & Klein, Compresión semipérdida http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520
Como de costumbre, la pregunta de «mejor» se resuelve refinando la cuestión del propósito real, definiendo métricas de calidad y ponderación adecuada de esas métricas para definir «tu» mejor @ Alex-Kamil. Los temas de las siguientes fuentes son inspiradores:
* Transacciones IEEE sobre teoría de la información http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * Transacciones IRE sobre teoría de la información http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Data Compression Conference pages.cs.brandeis.edu/~dcc/
Finalmente, como no soy un especialista sino un aficionado en la compresión sin pérdidas, recientemente me ha sorprendido el rendimiento (en relación de compresión) de Deplump (http://www.deplump.com/index.html) en algunos archivos de texto largos en inglés y algunos archivos binarios (en comparación con mis favoritos rar, Bzip2 y 7zip citados en otras respuestas). Puede probarlo para archivos cortos en línea. Para obtener información adicional, consulte F. Wood et al. The Sequence Memoizer, 2011 (consulte http://www.sequencememoizer.com/) o la página web de Franck Wood http://www.stat.columbia.edu/~fwood/