LZW符号の復号化手順は以下のとおりです。
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
---|---|---|---|---|---|---|
(0) | 0 | (1) | 1 | … | (255) | 255 |
復号化の場合もこの最初の256個のエントリーは実際には用意する必要ありませんが、原理をわかりやすくするためにやはり書いておきます。
最初の符号は必ず255以内の番号ですから、それを8ビットの記号として扱った場合の記号をそのまま出力します。 例えば最初の番号が97で、それを8ビットの記号として扱ったものがaだとしますと、
例えば読み込んだ番号が384で、それに対応する語句が「a…b」、現在の記号列が「c…d」だとしますと、
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
---|---|---|---|---|---|---|
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | … | 語句 | 番号 | … | 語句 | 番号 |
---|---|---|---|---|---|---|---|
×× | 256 | … | a…b | 384 | … | c…da | n |
例えば読み込んだ番号が384で、現在の辞書の登録語句数が384個、現在の記号列が「c…d」だとしますと、
語句 | 番号 | 語句 | 番号 | … | 語句 | 番号 |
---|---|---|---|---|---|---|
(0) | 0 | (1) | 1 | … | (255) | 255 |
語句 | 番号 | … | 語句 | 番号 |
---|---|---|---|---|
×× | 256 | … | c…dc | 384 |
復号化の場合、語句を辞書に登録するタイミングが符号化時に比べてワンテンポ遅れますので、途中で新しい登録語句の参照番号nが(2p−2)となった時、つまりその時の辞書の登録数が(2p−1)個になった時、pを1増やして次から読み込む符号のビット数を1ビット増やします。 また辞書の最大登録数Mと登録語句数が(M−1)個に達した時の処理は、当然、符号化時と同じにします。