ZIPのようなファイル圧縮の主なステップの1つは、以前のデコードされたテキストを参照ソースとして使用することです。例えば、符号化されたストリームは、「次の219個の出力文字は、5161バイト前の復号ストリームからの文字と同じである」と言うかもしれない。これにより、ちょうど3バイト程度の219文字を表現できます。 (ハフマン圧縮のように、ZIPにはもっと多くのことがありますが、参照整合についてはちょっと話しています)。文字列一致アルゴリズムの戦略は私の質問です。 zlibなどのソースコードを見ても、圧縮マッチングアルゴリズムの説明はよく分かりません。スライディングウィンドウで文字列の一致を見つけるアルゴリズム
問題のように記述することがあります:テキストのブロックを考えると、それの30Kを言うと、入力文字列、正確に入力文字列の先頭にマッチしたテキストの30Kで最長参照を見つけます「。アルゴリズムは効率的でなければなりません。つまり、30Kブロックのテキストは、先頭からいくつかのバイトを削除し、後ろに新しいバイトを追加して更新し、新しいマッチを実行します。
私は議論にもっと関心がありますソースコードまたはライブラリ(zlibには非常に良いソースがあります)異なるトレードオフを持ついくつかのアプローチがあると思われます。
はい、非常に関連しています。大きな(そして決定的な)違いは、マッチが文字通り何百万回も繰り返され、毎回ユニークな新しいソース文字列(前のソースを新しいウィンドウにスライドさせることから)です。 – SPWorley