Изменения

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

Алгоритм LZW

1609 байт убрано, 03:59, 4 ноября 2010
Декодирование
| style="border-right: none;" | 8:
| style="border-left: none;" | CAB
| style="border-right: none;" | 329:| style="border-left: none;" | RBC?| style="text-align: left;" | создали код 31 (последний, содержащий 5 бит)
|-
| 111 || 7
| style="text-align: center;" | NABC| style="border-right: none;" | 329:| style="border-left: none;" | RNBCA| style="border-right: none;" | 3310:| style="border-left: none;" | NABC?
| style="text-align: left;" | начинаем использовать 6 бит
|-
| 1000 1010 || 810| style="text-align: center;" | OABCA| style="border-right: none;" | 3310:| style="border-left: none;" | NOABCA| style="border-right: none;" | 3411:| style="border-left: none;" | OABCA? ||
|-
| 101 || 5
| style="text-align: center;" | TBC| style="border-right: none;" | 3411:| style="border-left: none;" | OTABCAB| style="border-right: none;" | 3512:| style="border-left: none;" | T? |||-| 011011 || 27| style="text-align: center;" | TO| style="border-right: none;" | 35:| style="border-left: none;" | TT| style="border-right: none;" | 36:| style="border-left: none;" | TO? |||-| 011101 || 29| style="text-align: center;" | BE| style="border-right: none;" | 36:| style="border-left: none;" | TOB| style="border-right: none;" | 37:| style="border-left: none;" | BE?| style="text-align: left;" | 36 = TO + 1й символ (B) |-| 011111 || 31| style="text-align: center;" | OR| style="border-right: none;" | 37:| style="border-left: none;" | BEO| style="border-right: none;" | 38:| style="border-left: none;" | OR?| style="text-align: left;" | следующей полученной последовательности (BE)|-| 100100 || 36| style="text-align: center;" | TOB| style="border-right: none;" | 38:| style="border-left: none;" | ORT| style="border-right: none;" | 39:| style="border-left: none;" | TOB? |||-| 011110 || 30| style="text-align: center;" | EO| style="border-right: none;" | 39:| style="border-left: none;" | TOBE| style="border-right: none;" | 40:| style="border-left: none;" | EO? |||-| 100000 || 32| style="text-align: center;" | RN| style="border-right: none;" | 40:| style="border-left: none;" | EOR| style="border-right: none;" | 41:| style="border-left: none;" | RN? |||-| 100010 || 34| style="text-align: center;" | OT| style="border-right: none;" | 41:| style="border-left: none;" | RNO| style="border-right: none;" | 42:| style="border-left: none;" | OTBC? ||
|-
| 000000 || 0
|}
Единственная небольшая трудность может возникнуть, если новое слово словаря пересылается немедленно. В приведённом выше примере декодирования, когда декодер встречает первый символ, '''TABC?''', он знает, что слово 27 10 начинается с TABC, но чем оно заканчивается? Проиллюстрируем проблему следующим примером. Мы декодируем сообщение '''ABABA''':
Данные: На выходе: Новая запись:
Полная: Частичная:
55
правок

Навигация