Алгоритм Лемпеля-Зива
Классический алгоритм Лемпеля-Зива LZ77,
названный так по году своего опубликования, предельно прост. Он формулируется
следующим
образом : "если в прошедшем ранее выходном потоке
уже встречалась подобная
последовательность байт, причем запись о ее длине и смещении от текущей
позиции короче чем сама эта последовательность, то в выходной файл
записывается ссылка (смещение, длина), а не сама последовательность".
Так фраза "КОЛОКОЛ_ОКОЛО_КОЛОКОЛЬНИ
" закодируется как
"КОЛО(-4,3)_(-5,4)О_(-14,7)ЬНИ
".
Распространенный метод сжатия RLE
(англ. Run Length Encoding),
который заключается
в записи вместо последовательности одинаковых символов одного символа
и их количества, является подклассом данного алгоритма. Рассмотрим, например,
последовательность "ААААААА
". С помощью алгоритма RLE она
будет закодирована как "(А,7)
", в то же время ее можно достаточно
хорошо сжать и с помощью алгоритма LZ77 : "А(-1,6)
". Действительно,
степень сжатия именно такой последовательности им хуже (примерно на 30-40%), но
сам по себе алгоритм LZ77 более универсален, и может намного лучше обрабатывать
последовательности вообще несжимаемые методом RLE.
Назад | Содержание
| Вперед