2

私は現在、データをエンコード/デコードするためのDEFLATEメソッドについて読んでいます。プロセスは2つの部分で構成されていることを理解しています。

私。(指定されたウィンドウ内の)重複する情報を、前の同一の部分への参照に置き換えます。

ii。ハフマンコーディングを使用して、最も一般的に発生するシンボルのサイズを縮小します。

(i)について質問があります。DEFLATEはLZ77を使用します。これは、サイズウィンドウに基づいて情報を検索し、重複する情報が見つかった場合は、それを「ポインター」に置き換えます。それは完全に理にかなっています。

しかし、LZ77を使用してデコードする場合、DEFLATEはどのようにポインターを認識しますか?(ポインターは長さと距離のペアです。それがポインターなのか、それとも初期データに存在していた数字なのかをどのように見分けることができますか?)

参照: http: //en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination

4

1 に答える 1

4

はるかに正確なDeflateRFC1951仕様を読んで、そのような質問に答えることをお勧めします。

表示される内容=>3.2.5。圧縮されたブロック(長さと距離のコード)

「文字と長さのアルファベットが1つのアルファベットにマージされます」

つまり、次のシンボルを取得するだけで、それがリテラル(0..255)であるか、一致長(257..285)であるか、またはブロックの終わり(256)であるかがすぐにわかります。一致する長さの場合、参照(オフセット)もデコードする必要があります。オフセットは、別のツリーを使用してエンコードされます。

于 2012-01-25T09:38:27.937 に答える