回答:
圧縮されるデータに大きく依存します。ゼロでいっぱいの1Gbファイルを使用した簡単なテストでは、圧縮サイズが〜120Kbになるため、10Kbファイルは〜85Mバイトに拡張される可能性があります。
たとえば、データの冗長性が低い場合、アーカイブにネイティブに圧縮された形式(gif、jpg、png、...)の画像ファイルが含まれている場合、gzipは圧縮をまったく追加しません。プログラム実行可能ファイルなどのバイナリファイルの場合、最大2:1の圧縮が表示される場合があります。プレーンテキスト、HTML、またはその他のマークアップの場合、3:1または4:1以上はまれです。場合によっては10:1が表示されることもありますが、1つのシンボルで満たされたファイルで見られる〜8700:1は、同様の人工的な環境以外では表示されません。
実際に非圧縮コンテンツをディスクに書き込むことなく、gzipファイルを解凍するとどのくらいのデータが生じるかを確認できますgunzip -c file.gz | wc --bytes
-これはファイルを圧縮解除しますが、結果を保存せず、代わりに渡すwc
とバイト数をカウントしますそれらを破棄します。圧縮されたコンテンツが多くの小さなファイルを含むtarファイルである場合、完全なアーカイブを解凍するために著しく多くのディスク容量が必要になることがわかりますが、ほとんどの場合、gunzip
出力のパイピングから返されるカウントはwc
必要なだけ正確になります。
phpinfo()
非常によく圧縮されます。その出力の技術情報には、自然言語の平均的なチャンクよりも直接的な繰り返しが多く含まれており、アルファベットの分布はおそらくスムーズではないため、ハフマンステージでより良い結果を得ることができます。
通常、95%を超える圧縮は行われません(したがって、10kBのgzip圧縮されたデータは〜200kBに圧縮解除されます)が、指数関数的に拡張する特別に細工されたファイルがあります。を探して42.zip
、数ペタバイトの(意味のない)データを解凍します。
https://stackoverflow.com/a/16794960/293815から逐語的に引用
deflate形式の最大圧縮率は1032:1です。これは、エンコード可能な最長の実行が258バイトであるためです。このような実行ごとに少なくとも2ビット(長さコードに1ビット、距離コードに1ビット)が必要です。したがって、1つの圧縮バイトにつき4 * 258 = 1032の非圧縮バイトをエンコードできます。
gzipの結果をgzipすることで、より多くの圧縮を取得できます。通常、それは圧縮を改善しませんが、非常に長い実行のためにはできます。
ところで、deflateで使用されるLZ77アプローチは、ランレングスエンコーディングよりも一般的です。長さだけでなく、長さ/距離のペアが使用されます。これにより、文字列をある距離からコピーしたり、ランレングスのように1つの距離でバイトを複製したり、3つの距離で3倍のバイトを複製したりできます。
圧縮アルゴリズムの圧縮率は、圧縮されるデータの関数になります(そのデータの長さ以外)。
MaximumCompressionでの分析は、次の
ようなサンプルの1つを見てください。
ファイルの種類:複数のファイルの種類(合計46) このテストで圧縮するファイルの数:510 合計ファイルサイズ(バイト):316.355.757 平均ファイルサイズ(バイト):620,305 最大ファイル(バイト):18,403,071 最小ファイル(バイト):3,554
あなたの質問に対する答えは、入力次第です。圧縮がどのように行われるかを知るために、この6分間のビデオをご覧ください。
https://www.youtube.com/watch?v=ZdooBTdW5bM
あなたがそれから得るべきことは、圧縮率が各文字の頻度に依存することであり、したがって、一般的な最大率はなく、入力に依存します。英語のテキストの場合、約65パーセントです。