全プロセスの詳細解説
-
"abracadabra" の六つのトークン(検索ウィンドウ 16 文字) 5 ステップ
パネルは1つのトークン後に5.18×と表示している。6つすべてのトークンが処理された後に何と表示されるかを求めよ。入力は「abracadabra」、探索ウィンドウは16文字、先読みバッファは8である。
-
トークンは3つの固定幅フィールドで構成されるため、そのコストはデータではなく2つの設定によって決定される。オフセットはウィンドウ内の任意の位置を指定する必要があり、一致長はバッファサイズまでの任意の値を、リテラルは生の1バイトを表す。
-
エンコーダは左から右へスキャンし、ウィンドウが提供する最長一致を採用する。最初の3文字の手前には何も存在しないため、'a'、'b'、'r' はそれぞれ1回出力するだけでトークン丸ごと1つを費やす。位置0から「abra」をコピーする最後のトークンだけが、そのコストに見合う効果を発揮する。
-
パネル上の比率は累積数値であり、入力全体をこれまでに生成された出力で割ったものである。1つのトークン処理後では、11文字を17 bitsと比較しているため、初期値がこれほど高くなる。
-
それぞれ17 bitsのトークン6つで102 bitsとなり、88 bitsの入力に対するコストとなる。符号化後のデータは、符号化対象の元のデータよりも大きくなっている。
-
損益分岐点は1回の割り算で求められる。1つのトークンは17 bitsを費やし、それぞれ8 bits相当の何文字かを表現するため、この手法が得をするのは、トークン1つあたり平均17/8文字を超えて進む場合のみである。そしてこれら6つのトークンのうち、それを満たすのは最後の1つだけである。
解答
パネルには最初のトークン後に 5.18×、6番目のトークン後に 0.86× と表示される。同じ文字列、同じ符号化でありながら、1.0 を挟んで反対側に位置している。覚えておくべき数値は 1トークンあたり2.125文字 であり、これは単にトークン幅を8で割ったもので、LZ77が与えられた入力に有効かどうかを判定する基準そのものである。また、一見コストがかからないように見える設定ノブの代償も示している。探索ウィンドウを64に広げると、すべてのオフセットフィールドに2 bitsが追加されるが、この文字列ではより長い一致はまったく見つからず、解析結果は同じ6つのトークンのままであるため、比率は 0.77× に低下する。到達範囲を2倍にするごとに、使用されるかどうかにかかわらず、すべてのトークンでさらに1 bitのコストが発生する。
-
学習の道すじ
手作業によるデータ圧縮
参考文献 (1)
- The algorithm, and the offset-1 trick block 3 turns on: J. Ziv and A. Lempel, "A universal algorithm for sequential data compression." IEEE Transactions on Information Theory 23(3), 337–343, 1977.