この質問は、LZWアルゴリズムに厳密に限定されるものではなく、LZ77およびLZ78の他の実装をカバーする場合があります。
私はLZW辞書コーディングスキームを含む圧縮/解凍ユーティリティを書こうとしています。問題は、エンコード段階で各コードワード(または「コード」)が書き出された後に、区切り文字(スペース)を含める必要があることです。出力がデコーダーに直接ストリーミングされ、後でデコードするために圧縮ファイルに保存される可能性があるとは想定できないため、これを行ってきました(この場合、デコーダーは何が分離するかを検出するための何らかの方法が必要になりますコードワード-区切り文字)。
最近、これは不要であり、デコーダーは、おそらく以前に読み取ったコードに基づいて、毎回読み取る圧縮ファイルの量を動的に「把握」できる必要があると言われました。これにより、各コードの後に余分なバイトを挿入する(コストのかかる)必要がなくなると思われます。
デコーダーがこれをどのように理解できるかわかりません。多分それがどのように機能するかを理解している誰かが私にそれを説明することができますか?ありがとう。
編集:
ディクショナリは、「入力文字列」を整数(コード)にマッピングするハッシュテーブルであり、入力データが読み込まれるにつれて通常の方法で構築されます。コードは圧縮ファイルに書き出されます。デコーダーは、圧縮ファイルから各コード(整数)を読み取り、出力する関連文字列を辞書で検索するか、そのコードのエントリがない場合は、通常の方法で文字列がどうあるべきかを判断して更新しますその辞書。
「ファイルがストリーミングまたは保存されている場合、なぜ違いが生じるのですか?」エンコーダーの出力が一度に1つのコードをデコーダーにストリーミングする場合、デコーダーはコードを受信するときに各コードを処理できます。しかし、エンコーダーがすべてのコードをファイル(圧縮ファイル)に書き込み、後でそのファイルがデコーダーに送られる場合、デコーダーは、あるコードがどこから始まり、別のコードがどこから始まるかをどのように知るのでしょうか。ファイルは、数字のマッシュアップされたシーケンスになります。
例:区切り圧縮ファイル:127 32 45 22 228 122 209 ....区切りなし圧縮ファイル:127324522228122209 .. ..
-ロブ