4,000,000の「double」値を持つバイナリファイルを作成しました(合計32MB)。 それから私はそれを圧縮し、私の驚いたことに、ファイルは46KBに収縮しました。巨大なバイナリファイルはほぼ100%縮小されますか?
これはほぼ100%の打撃です!それは本当ですか?または私はここに何かを逃していますか?
4,000,000の「double」値を持つバイナリファイルを作成しました(合計32MB)。 それから私はそれを圧縮し、私の驚いたことに、ファイルは46KBに収縮しました。巨大なバイナリファイルはほぼ100%縮小されますか?
これはほぼ100%の打撃です!それは本当ですか?または私はここに何かを逃していますか?
圧縮率は、アルゴリズムとのデータに依存します。たとえば、32MB相当のゼロはかなりよく圧縮されます。
マイコンピュータサイエンスの基礎はかなり錆びているが、私は私が覚えているから推測することができます。ダブルは8バイト(64ビット)と言うことができます。 -1000〜1000の範囲は、2^11の連続した整数に似ています。したがって、64-11 = 53ビットがすべての数値によって共有される可能性があり、圧縮されたスペースの大半は残りの11ビットに使用されることが予想されます。それはすでに53/64 = 82.2%の節約です。
ここで、データはおそらく完全にランダムではありません。まともなコンプレッサーは、繰り返されたストリングを検出し、さらにゲインを得ることができるはずです。上の簡単な例:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbb ==> 30a10b
値は何ですか?すべてのゼロ? – Steve
私は低い値を感知します。 – user562374
-1000〜1000の倍の値。 – user3262424