Изменения

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

Алгоритм LZW

11 байт добавлено, 01:17, 26 ноября 2014
Пример
{| class="wikitable" border = 1, style="float:right; text-align: right; margin-left: auto; margin-right: auto;"
|- bgcolor=#EEEEEE
! Символ !! Код Битовый код !! Битовый код Код
|-
| a || 0 000 ||0000
|-
| b || 1 001 || 0011
|-
| c || 2 010 || 0102
|-
| d || 3 011 || 0113
|-
| e || 4 100 || 1004
|}
Особенность LZW заключается в том, что для декомпрессии нам не надо сохранять таблицу строк в файл для распаковки. Алгоритм построен таким образом, что мы в состоянии восстановить таблицу строк, пользуясь только потоком кодов.
Теперь представим, что мы получили закодированное сообщение, приведённое выше, и нам нужно его декодировать. Прежде всего нам нужно знать начальный словарь, а последующие записи словаря мы можем реконструировать уже на ходу, поскольку они являются просто конкатенацией предыдущих записей. Кроме того, при в процессе кодирование и при декодирование коды в словарь добавляются во время обработки одного и того же символа, т.е. это происходит “синхронно”.
=== Примечание ===
Для повышения степени сжатия изображений данным методом часто используется одна "хитрость" “хитрость” реализации этого алгоритма. Некоторые файлы, подвергаемые сжатию с помощью LZW, имеют часто встречающиеся цепочки одинаковых символов, например <tex>aaaaaaaaaaaaa... </tex> или <tex>303030</tex> … и т. п. Их непосредственное сжатие будет генерировать выходной код <tex>005000600007...</tex>. Спрашивается, можно ли в этом частном случае повысить степень сжатия?
Оказывается, это возможно, если оговорить некоторые действия:
Анонимный участник

Навигация