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