Изменения

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

Алгоритм LZW

4306 байт добавлено, 18:35, 21 октября 2010
Пример
|-
|}
 
=== Кодирование ===
Без использования алгоритма LZW, при передаче сообщения как оно есть — 25 символов по 5 бит на каждый — оно займёт 125 бит. Сравним это с тем, что получается при использовании 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="4em" rowspan="2" | Следующий символ
! colspan="2" | Вывод
! scope="col" width="7em" rowspan="2" colspan="2" | Extended Dictionary
! rowspan="2" | Comments
|- bgcolor =#EEEEEE
! Код || Биты
|-
| style="text-align: center;" | NULL
| style="text-align: center;" | T || ||
| style="border-right: none;" |
| style="border-left: none;" | ||
|-
| style="text-align: center;" | T
| style="text-align: center;" | O
| 20 || 10100
| style="border-right: none;" | 27:
| style="border-left: none;" | TO
| style="text-align: left;" | 27 = first available code after 0 through 26
|-
| style="text-align: center;" | O
| style="text-align: center;" | B
| 15 || 01111
| style="border-right: none;" | 28:
| style="border-left: none;" | OB ||
|-
| style="text-align: center;" | B
| style="text-align: center;" | E
| 2 || 00010
| style="border-right: none;" | 29:
| style="border-left: none;" | BE ||
|-
| style="text-align: center;" | E
| style="text-align: center;" | O
| 5 || 00101
| style="border-right: none;" | 30:
| style="border-left: none;" | EO ||
|-
| style="text-align: center;" | O
| style="text-align: center;" | R
| 15 || 01111
| style="border-right: none;" | 31:
| style="border-left: none;" | OR ||
|-
| style="text-align: center;" | R
| style="text-align: center;" | N
| 18 || 10010
| style="border-right: none;" | 32:
| style="border-left: none;" | RN
| style="text-align: left;" | 32 requires 6 bits, so for next output use 6 bits
|-
| style="text-align: center;" | N
| style="text-align: center;" | O
| 14 || 001110
| style="border-right: none;" | 33:
| style="border-left: none;" | NO ||
|-
| style="text-align: center;" | O
| style="text-align: center;" | T
| 15 || 001111
| style="border-right: none;" | 34:
| style="border-left: none;" | OT ||
|-
| style="text-align: center;" | T
| style="text-align: center;" | T
| 20 || 010100
| style="border-right: none;" | 35:
| style="border-left: none;" | TT ||
|-
| style="text-align: center;" | TO
| style="text-align: center;" | B
| 27 || 011011
| style="border-right: none;" | 36:
| style="border-left: none;" | TOB ||
|-
| style="text-align: center;" | BE
| style="text-align: center;" | O
| 29 || 011101
| style="border-right: none;" | 37:
| style="border-left: none;" | BEO ||
|-
| style="text-align: center;" | OR
| style="text-align: center;" | T
| 31 || 011111
| style="border-right: none;" | 38:
| style="border-left: none;" | ORT ||
|-
| style="text-align: center;" | TOB
| style="text-align: center;" | E
| 36 || 100100
| style="border-right: none;" | 39:
| style="border-left: none;" | TOBE ||
|-
| style="text-align: center;" | EO
| style="text-align: center;" | R
| 30 || 011110
| style="border-right: none;" | 40:
| style="border-left: none;" | EOR ||
|-
| style="text-align: center;" | RN
| style="text-align: center;" | O
| 32 || 100000
| style="border-right: none;" | 41:
| style="border-left: none;" | RNO ||
|-
| style="text-align: center;" | OT
| style="text-align: center;" | #
| 34 || 100010
| style="border-right: none;" |
| style="border-left: none;" |
| style="text-align: left;" | # stops the algorithm; send the cur seq
|-
| || || 0 || 000000
| style="border-right: none;" |
| style="border-left: none;" |
| style="text-align: left;" | and the stop code
|-
|}
 
 
Таким образом, используя LZW мы сократили сообщение на 29 бит из 125 — это почти 22 %. Если сообщение будет длиннее, то элементы словаря будут представлять всё более и более длинные части текста, благодаря чему повторяющиеся слова будут представлены очень компактно.
55
правок

Навигация