LZ77符号化の手順は以下のとおりです。
通常、Nは1024〜4096バイト、Fは16〜256バイト程度が用いられます。 例えばN=4096、F=256としますと、最大(F−1=255)バイトまでの最長一致系列を処理することができ、[最長一致系列の参照部の先頭からのオフセット値]12ビット、[最長一致系列の記号数]8ビット、[一致しない最初の記号」8ビットの、計28ビットの固定長で符号化することになります。
最初は参照部にデータがありませんから、最初の記号は必ず「00<最初の記号>」と符号化されます。
このため、最初の記号だけは00を付けずに記号だけ出力します。
例えばオフセットmから始るpバイトが最長一致系列であり、一致しない最初の記号がxだとしますと、「mpx」という符号を出力し、一致する記号がない時は「00<符号化部の最初の記号>」という符号を出力します。
最長一致系列は最大(F−1)バイトであり、符号化部のFバイト全体が一致する場合でも最長符号系列を(F−1)バイトとし、最後の記号を一致しない最初の記号として扱います。 また最長一致系列の先頭は参照部にある必要がありますが、末尾は符号化部にまで入ってもかまいません。 例えば下図のような場合、最長一致系列はオフセット(N-3)から始る5バイトが最長一致系列となり、一致しない最初の文字はdとなります。 したがって0≦m≦(N−1)、0≦p≦(F−1)ということになります。
下図のように、最後に不一致記号がない場合は「mp」だけを出力します。
例として3章5節のハフマン符号の例と同じ「aabbccccddddeeeeeeeeffff」という元データを、前節の手順に従って符号化してみましょう。
このデータでは最長一致系列のオフセット値とバイト数はどちらも7であり、ともに3ビットで符号化することができます。 したがって符号化後のデータは、
となり、この時の圧縮率と平均符号長は次のようになります。
圧縮率= | 84 ─── 24×8 | = | 84 ─── 192 | =0.4375(43.75%) |
平均符号長= | 84 ── 24 | =3.5ビット |
またこのデータの場合、記号は6種類しかありませんから、
と3ビットで符号化することも可能です。 不一致記号としてこの符号を用い、記号と符号の対応表を符号化後のデータに追加することにすれば、符号化後のデータは、
となり、ハフマン符号よりも6ビット短くすることができます。 ただしオーバーヘッドのビット数まで考慮しますと、圧縮率は記号を通常の8ビットで表す単純な方法が一番良く、ハフマン符号が一番悪くなります。