ZIP などのファイル圧縮の主要な手順の 1 つは、以前にデコードされたテキストを参照ソースとして使用することです。たとえば、エンコードされたストリームは、「次の 219 の出力文字は、5161 バイト前のデコードされたストリームの文字と同じです」と言う場合があります。これにより、わずか 3 バイト程度で 219 文字を表すことができます。(ハフマン圧縮のように、ZIP にはそれ以上の機能がありますが、参照の一致について話しているだけです。)
私の質問は、文字列一致アルゴリズムの戦略が何であるかです。zlib などのソース コードを見ても、圧縮マッチング アルゴリズムの適切な説明が得られないようです。
この問題は次のように表現できます: 30K のテキスト ブロックと入力文字列が与えられた場合、入力文字列の先頭に正確に一致する 30K のテキストの中で最も長い参照を見つけます。"アルゴリズムは反復時に効率的でなければなりません。つまり、30K のテキスト ブロックは、前部からいくつかのバイトを削除し、後部に新しいバイトを追加することによって更新され、新しい一致が実行されます。
ソースコードやライブラリではなく、これを行うためのアルゴリズムの議論にもっと興味があります。(zlib には非常に優れたソースがあります!) さまざまなトレードオフを伴ういくつかのアプローチがあるのではないかと思います。