必要のない差分の再計算をしないようにする

A,B の連結を行うまえとあとで、
A,B の連結により影響を受けない(記述長計算にかかわる範囲での文字列の連結状態が変わらない)差分の再計算をしないようにする。

こうしたことが必要になったのは、記憶のない符号化に比べて計算時間が増えたため。
だいたい、辞書エントリの個数を掛けたくらいの時間がかかる。
(開始時で、1000倍〜3000倍。徐々に悪化する)

現状:
各bigramに関して、1ステップごとに、その時点で連結したら記述長がどれだけ変わるかを、そのつど計算している。

改良後:
各bigramに関して、連結したら記述長がどれだけ変わるかを常に保持する。
連結のたびに、その情報を(必要があれば)更新する。
1つ前、2つ前、3つ前、1つ後からそれぞれ影響を受ける項がある。

#(CDAB)=0, #(DAB)=0, #(AC)=0 ... ならば、
CDの連結に際して、ABの連結による差分が影響を受けない。
そうでなければ再計算する。

そういえば [2005-09-02-1] も、木のノードに、
記述長変化分の情報を保持していた。
記憶のない符号化の場合も(実装はしていなかったが)
差分の更新は連結された文字のみでよいので簡単。