La mayoría de los archivos de texto se comprimen con uno de los algoritmos LZ-family, que combinan un Dictionary Coder junto con un Entropy Coder como Huffman.
Como el diccionario Coder se basa en un "diccionario" continuamente actualizado, su resultado de codificación depende del historial (todos los códigos en el diccionario se derivan de los datos de entrada hasta el símbolo actual), por lo que no es Es posible saltar a una ubicación determinada y comenzar a decodificar, sin descodificar primero todos los datos anteriores.
En mi opinión, puede usar un decodificador de flujo zlib que devuelve los datos descomprimidos sin esperar a que se descomprima todo el archivo. Esto no ahorrará tiempo de ejecución pero ahorrará memoria.
Una segunda sugerencia es hacer la codificación de Huffman en palabras en inglés, y olvidarte de la parte del codificador del diccionario. Cada palabra en inglés se asigna a un código único sin prefijo.
Finalmente, @SHODAN dio la sugerencia más sensata, que es indexar los archivos, comprimir el índice y agruparlos con los archivos de texto comprimido. Para hacer una búsqueda, descomprima solo el archivo de índice y busque las palabras. Esto es, de hecho, una mejora con respecto a la codificación de palabras de Huffman: una vez que encontraste la frecuencia de las palabras (para asignar el código de prefijo de manera óptima), ya has creado el índice, para que puedas mantener el índice de búsqueda.
relacionado: http://stackoverflow.com/questions/4855403/fast-search-for-text-in-files-in-a-directory-in-unix –