LZ77:過去を辞書として参照する

スライド窓から既出パターンを探し、(距離, 長さ) に置き換えていく様子をステップ実行で見ます。繰り返しの多い文ほど縮みます。

入力文字列(編集できます)
32
10
処理済み / 全体
出力トークン数
うち一致(コピー)
圧縮率(推定)
いま出力したトークン
読み方
  • リテラル = 過去に無い新しい文字
  • (距離, 長さ) = 距離だけ戻って長さ分コピー
スライド窓(左=過去/辞書、緑=今回の一致、右=未処理)
出力トークン列(これが圧縮データ)
LZ77 は、これから読む文字列の一部がすでに過去に出ていないかを探す圧縮法です。
見つかれば、その文字をそのまま書く代わりに「何文字前に戻り、何文字コピーすればよいか」を表す (距離, 長さ) の組に置き換えます。過去の文字列そのものが「辞書」になるわけです。
過去を遡れる範囲を窓サイズ、一度にコピーできる最大長を先読みバッファといいます。 入力・窓サイズを変えて、繰り返しの多い文ほどトークン数が減る(=縮む)ことを確かめましょう。

いま何が起きている?

ここがポイント