Алгоритмы семейства LZ77 довольно просты в реализации и обладают большим быстродействием по сравнению с LZ78. Поэтому именно они широко используются в популярных архиваторах. Эффект сжатия у этих алгоритмов достигается за счет замены уже встречавшихся ранее в тексте фраз на пару значений (ссылка назад, длина фрагмента). Все алгоритмы этого семейства отличаются друг от друга размером окна обзора предыдущего текста и максимальным и минимальным размером заменяемого фрагмента. От выбора этих параметров существенным образом зависит быстродействие конкретной реализации алгоритма. Приведем схему наиболее популярного варианта LZSS, обладающего самым большим быстродействием при соответствующем подборе параметров:
while (lookAheadBuffer not empty)
get a pointer (position, lenght) to the longest match in
the window for lookahead buffer;
if (lenght > MINIMUM_MATCH_LENGHT)
output a pair (position, lenght);
shift the window lenght characters along;
else
output the first character in the lookahead buffer;
shift the window 1 character along;
endif
endwile
Алгоритм распаковки еще более прост и быстр: если на вход поступает пара (position, length) - выдать на выход фрагмент текста из окна длиной lenght символов начиная с позиции position, если же на вход поступает один символ, то он копируется в выходной поток. После этого окно сдвигается на соответствующее число символов.
| Изменена 30.12.2006 13:59 MSK |
|
|