こんばんは、川合です。
Hidemi KAWAI は 2004/05/16 00:19:53 の「[osask 6951] bim2bin4a.
」で書きました:
> 最後の圧縮率ですが、ある程度大きなサイズならtek0に勝てます。小
>さいサイズになるとtek0よりも圧縮率が悪いです。これは各種の拡張性
>のために(さらにはバイトストリームとビットストリームの分離のため
>に)、ヘッダがtek0よりも長くなっているせいです。ブロックサイズが
>小さいと、個々のブロックの圧縮率が悪くなり、さらにはインデックス
>がついたりもしてtek0に対してけっこうな差がつきます。
>
> ということでtek1はtek0に代わるものではなく、向き不向きにあわせ
>て使い分ける感じでいくのがいいと思います。
こんな結果じゃ情けないので、tek0に打ち勝つべく、さらに改良を施
しました。その結果として、小さいファイルでもtek0より圧縮率が良く
なりました。
http://k.hideyosi.com/bim2bi4c.lzh (26.1KB)
これはヘッダの構造を修正しただけで、tek1としての基本的な性質は
そのままです。またこのバージョンからbim2binのデフォルトをtek0か
らtek1に変更しています。
さてどのくらいまともな圧縮率になったのかは、次の表を見ると分か
ると思います。
無圧縮 tek0 tek1 bz2
hellok1.org 272 128 126 166
100% 47.1% 46.3% 61.0%
kdun00b.org 655360 46246 45788 47306
100% 7.06% 6.99% 7.22%
zero4k.org 4096 27 27 43
100% 0.66% 0.66% 1.05%
zero64k.org 65536 28 29 43
100% 0.043% 0.044% 0.066%
bballc0 628 614
bballc2 295 295
helloc4 497 496
helloc9 176 175
invader2 1699 1692
invader5 1258 1246
bim2bin.c 53792 15019 14745 12903
100% 27.9% 27.4% 24.0%
zero4kは0x00が4096個並んだだけのファイルです。bim2bin.cはbim2b
i4c.lzhに入っているものです。この表の中ではtek1での結果はすべて
ブロックサイズを1MBにしたものです(圧縮率優先ということで)。こ
こには挙げていませんが、インデックスの圧縮形式も同様に再検討した
ので、ブロックサイズを小さくしてもbim2bin4aのときほどには大きく
なりません。
まずbim2bin4aではtek0に負けていたhellok1での逆転に成功しました
。またzero4kやbballc2も負けていたのですが、追いつきました。zero6
4kはまだ負けていますが1バイトなのでまあ悪くはないです。ビットス
トリームとバイトストリームに分割する関係上、バイトストリームがど
こから始まるかをヘッダに書かねばならず、もうこれ以上ヘッダを小さ
くすることはできないように思います。
zero64kを除けばtek1はtek0と同等かよりよい結果を出せていますし
、ある程度内容があるファイルでは結構な差をつけていますので、向き
不向きなどとはいわず、基本的にtek1を使うということで問題はないで
しょう。
また圧縮では定番のbz2との比較もしてみました。bz2は展開速度やア
ルゴリズムの簡単さよりも圧縮率を優先して、ハフマン符号などを積極
的に使っていると思われます。ということで、文字頻出頻度の差を利用
できるテキストなどでは、tek1はbz2と比較にはなりません。
しかし一方で、ハフマン符号などのメリットがほとんど生きない(つ
まり、0x00〜0xffまでのどんなバイトもほぼ均一な確率で利用されるよ
うな)バイナリファイルなどでは、tek1はbz2に対して結構な差をつけ
て勝っています。小さいファイルに対して強いのはまあ誉められないと
しても、kdun00b.orgのような大きなバイナリファイルでも十分に勝っ
ているのは、なかなか筋がいいように思います。
大雑把に見ると、bz2は得意不得意があって、tek1はそういうものが
なくて、特定のものを劇的に小さくはできないものの、どれもそれな
りには小さくできる、ということだと思います。むしろこういう性質の
ほうがOSがサポートする圧縮形式としては向いているでしょう。
---
最後になりましたが、今回もI.Tak.さんのドキュメントのおかげで、
少ない手間でOSASK ver.4.5の一般公開作業を終えました。(ドキュメ
ントのリリースを)待ってて良かったです。その分だけtek1の改良が早
くできましたから。
さてver.4.6では、KHBIOS関係の実装もさることながら、このtek1解
凍APIもつけることになりそうです。
それでは。
--
川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/