Изменения

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

Алгоритм LZW

229 байт добавлено, 08:54, 31 октября 2011
м
Нет описания правки
Пусть мы сжимаем последовательность "abacabadabacabae".
* '''Шаг 1: '''Тогда, согласно изложенному выше алгоритму, мы добавим к изначально пустой строке “a” и проверим, есть ли строка “a” в таблице. Поскольку мы при инициализации занесли в таблицу все строки из одного символа, то строка “a” есть в таблице. * '''Шаг 2: '''Далее мы читаем следующий символ "b" из входного потока и проверяем, есть ли строка “ab” в таблице. Такой строки в таблице пока нет.
Добавляем в таблицу <5> “ab”. В поток: <0>;
* '''Шаг 3: '''“ba” — нет. В таблицу: <6> “ba”. В поток: <1>;* '''Шаг 4: '''“ac” — нет. В таблицу: <7> “ac”. В поток: <0>;* '''Шаг 5: '''“ca” — нет. В таблицу: <8> “ca”. В поток: <2>;* '''Шаг 6: '''“ab” — есть в таблице; “aba” — нет. В таблицу: <9> “aba”. В поток: <5>;* '''Шаг 7: '''“ad” — нет. В таблицу: <10> “ad”. В поток: <0>;* '''Шаг 8: '''“da” — нет. В таблицу: <11> “da”. В поток: <3>;* '''Шаг 9: '''“aba” — есть в таблице; “abac” — нет. В таблицу: <12> “abac”. В поток: <9>;* '''Шаг 10: '''“ca” — есть в таблице; “cab” — нет. В таблицу: <13> “cab”. В поток: <8>;* '''Шаг 11: '''“ba” — есть в таблице; “bae” — нет. В таблицу: <14> “bae”. В поток: <6>;* '''Шаг 12: '''И, наконец последняя строка “e”, за ней идет конец сообщения, поэтому мы просто выводим в поток <4>.
{| class="wikitable" border =1, style="text-align: center; margin-left: auto; margin-right: auto;"
Итак, кодер кодировщик заносит первую «а» в строку, ищет и находит "а" в словаре. Добавляет в строку следующую "а", находит, что "аа" нет в словаре. Тогда он добавляет запись <5>: "аа" в словарь и выводит метку <0> ("а") в выходной поток. Далее строка инициализируется второй «а», то есть принимает вид "a?" вводится третья «а», строка вновь равна "аа", которая теперь имеется в словаре. Если появляется четвертая «а», то строка "aa?" равна "ааа", которой нет в словаре. Словарь пополняется этой строкой, а на выход идет метка <5> ("aa"). После этого строка инициализируется третьей «а», и т.д. и т.п. Дальнейший процесс вполне ясен. <br>
В результате на выходе получаем последовательность 0, 5, 6 …, которая короче прямого кодирования стандартным методом LZW.
84
правки

Навигация