Сжатие информации в компьютерных сетях
100
способов, с помощью которых процедура LZ может быть сделана более
эффективной. Многие улучшения LZ алгоритма связаны с повышением
эффективности кодирования триплетов (5.1) в связи с тем, что
использование триплета неэффективно, особенно, если длинные строки в
сообщении встречаются редко. Избавление от этой неэффективности
заключается в простом добавлении флагового бита, показывающего,
следует ли кодовое слово за простым символом. Используя этот флаг,
избавляются также от необходимости в трех элементах триплета. Теперь
все, что необходимо сделать- отправить пару значений, соответствующих
смещению и длине совпадения. Эта модификация алгоритма LZ77
используется в архиваторе LZSS.
При разработке алгоритма LZ77 неявно предполагалось, что в
сжимаемом сообщении одинаковые подстроки будут располагаться
довольно близко друг к другу. Это приводит к использованию таких
подстрок в предыдущей части строки в качестве словаря для кодирования
последующих частей. Однако, любая подстрока, которая повторяется через
период, длиннее чем строка, охваченная регистром кодера, не будет
захвачена и вместо сжатия может произойти расширение сообщения. В
современных системах сжатия величину n
В
повышают до 64 Кбайт. Но
рост размера буфера приводит к существенному увеличению времени
поиска , для уменьшения которого требуется применение более
эффективных стратегий поиска.
В результате решения этой проблемы Лемпелем и Зивом в 1978
году была опубликована статья с описанием улучшенного алгоритма
сжатия строк переменной длины [47], который получил название LZ78. В
соответствии с предложенным ими алгоритмом составляется таблица
(словарь) подстрок символов, которые встречались в предыдущей части
сообщения. Тем самым устраняются ограничения на расстояние между
текущей комбинацией символов и комбинацией, имевшей место в
переданной части сообщения. Выделяемые из поступающего входного
сообщения подстроки кодируются двумя кодовыми комбинациями -
дуплетом (i,C), где i-индекс, соответствующий самой длинной подстроке в
словаре, совпадающей с выделенной подстрокой, и С - код символа
входного потока, следующего за совпадающей подстрокой. Этот дуплет
затем становится новой записью в словаре, которой присваивается
очередной индекс таблицы подстрок.
Предложенный способ самостоятельного применения практически
не нашел, а явился основой широко распространенного алгоритма
компрессии LZW и метода сжатия, применяемого в модемах с протоколом
V.42 bis, которые рассматриваются ниже.