lazy matching
lazy matchingを実装しました。
sliding_window.hppの差分
lazy matchingというのは、スライド辞書から一致文字列を検索した後にすぐに出力しないで、次の位置での一致文字列を検索してみてから長くなるほうを選択する手法のことです。
例えば、「ababcbababc」という文字列をそのままLZSS圧縮すると、
a,b,a,b,c,bab,abc
で区切られますが、lazy matchingを使うと、
a,b,a,b,c,b,ababc
で区切られるのようになって圧縮率が少し良くなります。
その他、今日の修正箇所です。
- 肝心のスライド処理が動いていなかったので修正
- 圧縮サイズが元ファイルサイズを超えた場合、すぐに圧縮をキャンセルさせるために例外を送出するようにした
- ファイルスタンプ、コードページ拡張ヘッダをサポート
ちなみに、(遅いのは分かりきっていますが)測ってみたところ、UNLHA32.DLLの15倍遅かったです。