こんばんは、川合です。 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/