Изменения

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

Алгоритм LZW

13 байт добавлено, 08:28, 28 октября 2011
м
Пример
! Символ !! Битовый код
|-
| a || 00000
|-
| b || 01001
|-
| c || 10010
|-
| d || 11011|-| e || 100
|}
Тогда, согласно изложенному выше алгоритму, мы добавим к изначально пустой строке “a” и проверим, есть ли строка “a” в таблице. Поскольку мы при инициализации занесли в таблицу все строки из одного символа, то строка “a” есть в таблице. <br>
Далее мы читаем следующий символ "b" из входного потока и проверяем, есть ли строка “ab” в таблице. Такой строки в таблице пока нет. <br>
Добавляем в таблицу <45> “ab”. В поток: <0>; <br>“ba” — нет. В таблицу: <56> “ba”. В поток: <1>; <br>“ac” — нет. В таблицу: <67> “ac”. В поток: <0>; <br>“ca” — нет. В таблицу: <78> “ca”. В поток: <2>; <br>“ab” — есть в таблице; “aba” — нет. В таблицу: <89> “aba”. В поток: <45>;<br>“ad” — нет. В таблицу: <910> “ad”. В поток: <0>; <br>“da” — нет. В таблицу: <1011> “da”. В поток: <3>; <br>“aba” — есть в таблице; “abac” — нет. В таблицу: <1112> “abac”. В поток: <89>;<br>“ad” “ca” — есть в таблице; “cab” — нет. В таблицу: <913> “ad”“cab”. В поток: <08>; <br>“ca” “ba” — есть в таблице; “cab” “bae” — нет. В таблицу: <1214> “cab”“bae”. В поток: <76>;<br>И, наконец последняя строка “aba”“e”, за ней идет конец сообщения, поэтому мы просто выводим в поток <114>.
{| class="wikitable" border =1, style="text-align: center; margin-left: auto; margin-right: auto;"
| style="text-align: center;" | b
| 0 || 000
| style="border-right: none;" | 45:
| style="border-left: none;" | ab
|-
| style="text-align: center;" | a
| 1 || 001
| style="border-right: none;" | 56:
| style="border-left: none;" | ba
|-
| style="text-align: center;" | c
| 0 || 000
| style="border-right: none;" | 67:
| style="border-left: none;" | ac
|-
| style="text-align: center;" | a
| 2 || 010
| style="border-right: none;" | 78:
| style="border-left: none;" | ca
|-
| style="text-align: center;" | a
| 4 || 100
| style="border-right: none;" | 89:
| style="border-left: none;" | aba
|-
| style="text-align: center;" | d
| 0 || 000
| style="border-right: none;" | 910:
| style="border-left: none;" | ad
|-
| style="text-align: center;" | a
| 3 || 011
| style="border-right: none;" | 1011:
| style="border-left: none;" | da
|-
| style="text-align: center;" | c
| 8 || 1000
| style="border-right: none;" | 1112:
| style="border-left: none;" | abac
|-
| style="text-align: center;" | b
| 7 || 0111
| style="border-right: none;" | 1213:
| style="border-left: none;" | cab
|-
| style="text-align: center;" | e
| 5 || 0101
| style="border-right: none;" | 1314:| style="border-left: none;" | abaebae
|-
| style="text-align: center;" | e
! scope="col" width="6em" colspan="2" | Частичная
|-
| 1111 000 || 150| style="text-align: center;" | 15a
| style="border-right: none;" |
| style="border-left: none;" |
| style="border-right: none;" | 325:| style="border-left: none;" | 15, a?
|-
| 11001 001 || 251| style="text-align: center;" | 25b| style="border-right: none;" | 325:| style="border-left: none;" | 15, 25ab| style="border-right: none;" | 336:| style="border-left: none;" | 25, b?
|-
| 11001 000 || 250| style="text-align: center;" | 25a| style="border-right: none;" | 335:| style="border-left: none;" | 25, 25ba| style="border-right: none;" | 346:| style="border-left: none;" | 25, a?
|-
| 10001 010 || 172| style="text-align: center;" | 17c| style="border-right: none;" | 346:| style="border-left: none;" | 25, 17ac| style="border-right: none;" | 357:| style="border-left: none;" | 17, c?
|-
| 100001 || 33
84
правки

Навигация