Изменения

Перейти к: навигация, поиск

Алгоритмы LZ77 и LZ78

1174 байта убрано, 05:09, 29 октября 2010
Нет описания правки
Основная суть алгоритма - ето замена повторно вхождения строки ссылкою на одну из предыдущих позиций вхождения.
Для етого используют метод скользящего окна.
Метод кодирования согласно принципу скользящего окна учитывает уже ранее встречавшуюся информацию, то есть информацию, которая уже известна для кодировщика и декодировщика (второе и последующие вхождения некоторой строки символов в сообщении заменяются ссылками на ее первое вхождение).Скользящее окно можно представить в видединамической виде динамической структуры данных который организован так, чтобы запоминать «сказанную» ранее информацию и предоставлять к ней доступ.
Таким образом, сам процесс сжимающего кодирования согласно LZ77 напоминает написание программы, команды которой позволяют обращаться к элементам «скользящего окна», и вместо значений сжимаемой последовательности вставлять ссылки на эти значения в «скользящем окне».
Размер скользящего окна может динамически изменяться и составлять 2, 4 или 32 килобайта. Следует также отметить, что размер окна кодировщика может быть менее или равен размеру окна декодировщика, но не наоборот.
Рассмотрим последовательность из N элементов.
 
В стандартном алгоритме LZ77 совпадения строки кодируются парой:
* длина совпадения (match length)
Это означает, что каждый символ можно однозначно определить, переместившись назад в буфере — даже если данный символ еще отсутствует в буфере на момент декодирования текущей пары ''длина-смещение''.
=== Описания алгоритма===
LZ77 использует "скользящее" по сообщению окно, разделенное . Допустим на две неравные частитекущей итерации окно зафиксировано. Первая, большая по размеру, включает уже просмотренную часть сообщения. Вторая, намного меньшая, является буфером, содержащим еще незакодированные символы входного потока. Обычно размер буфера составляет не более ста байт. Алгоритм пытается найти С правой стороны окна наращиваем подстроку пока она есть в строке скользящее окно+наращиваемая строка и начинается в скользящем окне фрагмент, совпадающий с содержимым буфераАлгоритм LZ77 После наращивания алгоритм выдает коды, состоящие код состоящий из трех элементов:
* смещение в окне;
* длина подстроки;
* первый символ буфера, следующий за подстрокой.
В конце итерации алгоритм сдвигает окно на длину подстроки+1.=== Пример "КРАСНАЯ КРАСКАkabababk" ==={| border="21"
!Содержымое окна
!Содержимое буфераНаращиваемая строка
!КОД
|-
Анонимный участник

Навигация