2010-06-09 38 views
14

¿Cuál es el algoritmo de compresión más simple pero eficiente?Compresión de texto simple/eficiente

Deflate, lzma, etc. no son opciones válidas. Necesito algo que compila muy pequeño, como: RLE, LZX, Huffman, etc ..

Nota: Los datos son el 95% de texto ASCII
Editar: Los datos son ~ 20 kb en el momento, pero esperamos que crezca hasta 1 MB

Edit2:
Otras opciones interesantes
Smaz https://github.com/antirez/smaz
FastLZ http://fastlz.org/

+0

¿Cuánto texto está comprimiendo? Comprimir 12 caracteres es muy diferente a 12 MB de caracteres. – Daniel

+4

Deflate es la forma canónica de usar Huffman ... te estás contradiciendo a ti mismo allí. –

+1

Gracias por la nota Billy – arthurprs

Respuesta

6

suena como LZO fue diseñado para satisfacer sus necesidades:

  • descompresión es muy simple y rápido.
  • No requiere memoria para la descompresión.
  • La compresión es bastante rápida.
+0

Funciona como un encanto, el tamaño de datos comprimidos es ~ 58% de la original – arthurprs

+0

Actualización: Hice algunas optimizaciones en la estructura de archivos, ahora el tamaño comprimido es ~ 40% del original – arthurprs

1

mayoría de los esquemas del diccionario va a hacer muy bien. Cualquiera de los LZ. Usamos un varient LZ77 en sistemas integrados para muchas de nuestras cosas simples de compresión y funciona muy bien con casi ningún gasto de memoria. ¿Qué tipo de sistema se está comprimiendo y qué se está descomprimiendo? Eso determinará el tipo de compresor con el que puede salirse con la suya.

+0

Encontré 2 implementaciones muy buenas, http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/compress.c y http: //michael.dipperstein .com/lzw/la primera es realmente pequeña y la compresión es excelente – arthurprs

2

This benchmark tiene muchas comparaciones. Compruébalo ya que también muestra los algoritmos utilizados en el proceso de compresión.

+1

Ver también este enlace: http://cs.fit.edu/~mmahoney/compression/rationale.html – INS

2

Algo basado en BWT probablemente sería bueno para este caso. http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform
Comprime el texto mucho mejor que LZ, y es fácil de implementar desde cero, y hay buenas bibliotecas.
http://libbsc.com
http://encode.ru/threads/104-libBWT?p=22903&viewfull=1#post22903
http://code.google.com/p/libdivsufsort/

O, alternativamente, hay PPMD ​​ que se utiliza para la compresión de texto en rar/winzip/7-zip, etc, pero es más complicado.
http://www.compression.ru/ds/ppmdj1.rar
http://www.compression.ru/ds/ppmsj.rar (uso de memoria más rápido/pequeño)
http://www.ctxmodel.net/files/PPMd/ppmd_Jr1_sh8.rar (puerto alternativo)

+0

Gracias, opciones muy interesantes, especialmente basadas en BWT . – arthurprs

+0

Sin embargo, LZma resulta mejor que el bzip2 basado en BWT. – user611775

+0

En archivos de 900k +, tal vez. Pero no mencioné bzip2 de todos modos, y los codificadores vinculados son mejores. – Shelwien