2011-01-04 1 views
1

4,000,000の「double」値を持つバイナリファイルを作成しました(合計32MB)。 それから私はそれを圧縮し、私の驚いたことに、ファイルは46KBに収縮しました。巨大なバイナリファイルはほぼ100%縮小されますか?

これはほぼ100%の打撃です!それは本当ですか?または私はここに何かを逃していますか?

+0

値は何ですか?すべてのゼロ? – Steve

+0

私は低い値を感知します。 – user562374

+0

-1000〜1000の倍の値。 – user3262424

答えて

8

圧縮率は、アルゴリズムのデータに依存します。たとえば、32MB相当のゼロはかなりよく圧縮されます。

更新

マイコンピュータサイエンスの基礎はかなり錆びているが、私は私が覚えているから推測することができます。ダブルは8バイト(64ビット)と言うことができます。 -1000〜1000の範囲は、2^11の連続した整数に似ています。したがって、64-11 = 53ビットがすべての数値によって共有される可能性があり、圧縮されたスペースの大半は残りの11ビットに使用されることが予想されます。それはすでに53/64 = 82.2%の節約です。

ここで、データはおそらく完全にランダムではありません。まともなコンプレッサーは、繰り返されたストリングを検出し、さらにゲインを得ることができるはずです。上の簡単な例:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbb ==> 30a10b 
関連する問題