Поиск текста в сжатых файлах может быть быстрее, чем поиск того же самого в несжатых текстовых файлах.
Одна техника сжатия, которую я видел, жертвует некоторым пространством для быстрого поиска:
- поддерживает словарь с 2 ^ 16 записями каждого слова в тексте.Зарезервируйте первые 256 записей для буквенных байтов, на случай, если вы встретите слово, которого нет в словаре - даже если во многих больших текстах содержится менее 32 000 уникальных слов, поэтому им не нужно использовать эти буквенные байты.
- Сжать исходный текст, заменив 16-битный индекс словаря для каждого слова.
- (необязательно) В обычном случае, когда два слова разделены одним пробелом, отбросьте этот пробел;в противном случае поместите все байты в строке между словами в словарь как специальное «слово» (например, «.» и «,» и «\ n»), помеченное атрибутом «без пробелов по умолчанию», а затем «сжатие»."эти строки, заменив их соответствующим индексом словаря.
- Поиск слов или фраз путем сжатия фразы аналогичным образом и поиск сжатой строки байтов в сжатом тексте точно так же, как выбудет искать исходную строку в исходном тексте.
В частности, поиск одного слова обычно сводится к сравнению 16-разрядного индекса в сжатом тексте, что быстрее, чем поиск этого словав исходном тексте, потому что
- каждое сравнение требует сравнения меньшего числа байтов - 2, а не столько байтов в этом слове, а
- мы делаем меньше сравнений, потому чтосжатый файл короче.
Некоторые виды регулярных выражений могут быть переведеныed к другому регулярному выражению, которое непосредственно находит элементы в сжатом файле (а также, возможно, также находит несколько ложных срабатываний).Такой поиск также делает меньше сравнений, чем использование исходного регулярного выражения в исходном текстовом файле, потому что сжатый файл короче, но обычно каждое сравнение регулярного выражения требует больше работы, поэтому оно может быть или не быть быстрее, чем исходное регулярное выражение, работающее наисходный текст.
(В принципе, вы можете заменить 16-битные коды фиксированной длины префиксными кодами Хаффмана переменной длины, как упоминал Руонг - результирующий сжатый файл будет меньше, но программное обеспечение для обработкис этими файлами будет немного медленнее и сложнее).
Для более изощренных методов вы можете взглянуть на