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