Изменения

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

Алгоритм LZW

315 байт добавлено, 09:13, 31 октября 2011
м
Нет описания правки
Например, если сжимают байтовые данные (текст), то строк в таблице окажется 256 (от "0" до "255"). Если используется 10-битный код, то под коды для строк остаются значения в диапазоне от 256 до 1023. Новые строки формируют таблицу последовательно, т. е. можно считать индекс строки ее кодом. <br>
Алгоритму декодирования на входе требуется только закодированный текст, поскольку он может воссоздать соответствующую таблицу преобразования непосредственно по закодированному тексту. Алгоритм генерирует однозначно декодируемый код за счет того, что каждый раз, когда генерируется новый код, новая строка добавляется в таблицу строк. LZW постоянно проверяет, является ли строка уже известной, и, если так, выводит существующий код без генерации нового. Таким образом, каждая строка будет храниться в единственном экземпляре и иметь свой уникальный номер. Следовательно, при дешифровании при получении нового кода генерируется новая строка, а при получении уже известного, строка ивлекается из словаря.
== Алгоритм ==
{| class="wikitable" border =1, style="text-align: center; margin-left: auto; margin-right: auto;"
|- bgcolor =#EEEEEE
! scope="col" width="6em" rowspan="2" | Текущая строка
! scope="col" width="6em" rowspan="2" | Текущий символ
! scope="col" width="4em" rowspan="2" | Следующий символ
! Код || Биты
|-
| style="text-align: center;" | ab
| style="text-align: center;" | a
| style="text-align: center;" | b
| style="border-left: none;" | ab
|-
| style="text-align: center;" | ba
| style="text-align: center;" | b
| style="text-align: center;" | a
| style="border-left: none;" | ba
|-
| style="text-align: center;" | ac
| style="text-align: center;" | a
| style="text-align: center;" | c
| style="border-left: none;" | ac
|-
| style="text-align: center;" | ca
| style="text-align: center;" | c
| style="text-align: center;" | a
| style="border-left: none;" | ca
|-
| style="text-align: center;" | ab
| style="text-align: center;" | a
| style="text-align: center;" | b
| style="border-left: none;" | -
|-
| style="text-align: center;" | aba
| style="text-align: center;" | b
| style="text-align: center;" | a
| style="border-left: none;" | aba
|-
| style="text-align: center;" | ad
| style="text-align: center;" | a
| style="text-align: center;" | d
| style="border-left: none;" | ad
|-
| style="text-align: center;" | da
| style="text-align: center;" | d
| style="text-align: center;" | a
| style="border-left: none;" | da
|-
| style="text-align: center;" | ab
| style="text-align: center;" | a
| style="text-align: center;" | b
| style="border-left: none;" | -
|-
| style="text-align: center;" | aba
| style="text-align: center;" | b
| style="text-align: center;" | a
| style="border-left: none;" | -
|-
| style="text-align: center;" | abac
| style="text-align: center;" | a
| style="text-align: center;" | c
| style="border-left: none;" | abac
|-
| style="text-align: center;" | ca
| style="text-align: center;" | c
| style="text-align: center;" | a
| style="border-left: none;" | -
|-
| style="text-align: center;" | cab
| style="text-align: center;" | a
| style="text-align: center;" | b
| style="border-left: none;" | cab
|-
| style="text-align: center;" | ba
| style="text-align: center;" | b
| style="text-align: center;" | a
| style="border-left: none;" | -
|-
| style="text-align: center;" | bae
| style="text-align: center;" | a
| style="text-align: center;" | e
| style="border-left: none;" | bae
|-
| style="text-align: center;" | e
| style="text-align: center;" | e
| style="text-align: center;" | -
84
правки

Навигация