2010-05-09 11:47:14 +0000 2010-05-09 11:47:14 +0000
53
53
Advertisement

gzipの最大圧縮率は?

Advertisement

gzip(例のために10kbとします)が解凍できる最大のサイズは何ですか?

Advertisement
Advertisement

回答 (7)

95
95
95
2010-05-09 13:11:52 +0000

*2020-02-06:00更新 *コメントにあるように、元の結果をgzipで再現することができませんでした。元のクイックテストで誤って別の圧縮形式を使ってしまったと仮定して、gzipを使ってテストを繰り返し、以下の数値を更新しました。この新しい結果は、他の回答やコメントに記載されている理論上の最大圧縮率と一致しています。


圧縮されるデータに大きく依存します。標準バージョンの gzip (デフォルトのオプションを使用するか -9 を指定する) を使用してゼロでいっぱいの 1Gb のファイルを簡単にテストすると、~1018Kb の圧縮サイズが得られるので、10Kb のファイルは ~10Mbytes に拡張される可能性があります。

データの冗長性が低い場合、例えばアーカイブにネイティブに圧縮されている形式 (gif, jpg, png, …) の画像ファイルが含まれている場合、gzip はそれ以上の圧縮を全く行わないかもしれません。プログラムの実行ファイルのようなバイナリファイルの場合、2:1 までの圧縮が見られるかもしれませんが、プレーンテキストや HTML やその他のマークアップの場合は 3:1 や 4:1 以上の圧縮が見られる可能性は低くありません。場合によっては10:1になることもあるかもしれませんが、単一のシンボルで埋め尽くされたファイルで見られる~1030:1は、同様の人為的な状況以外では見られないものです。

非圧縮コンテンツを実際にディスクに書き込まずに gzip ファイルを解凍した結果、どれだけのデータが得られるかは、gunzip -c file.gz | wc --bytes で確認できます - これはファイルを解凍しますが、結果は保存しません。圧縮されたコンテンツが多数の小さなファイルを含む tar ファイルの場合、完全なアーカイブを解凍するためには、より多くのディスク容量が必要になることに気づくかもしれませんが、ほとんどの状況では、wc をパイピングして gunzip を出力して返されるカウントは、必要なだけ正確なものになるでしょう。

10
10
10
2010-05-09 12:04:29 +0000

通常、95%以上の圧縮率は得られませんが(10kBの圧縮されたデータは200kBまで解凍されます)、指数関数的に展開される特別なファイルもあります。42.zip を探すと、数ペタバイトの(意味のない)データに解凍されます。

8
Advertisement
8
8
2017-05-11 14:16:39 +0000
Advertisement

引用元: https://stackoverflow.com/a/16794960/293815

デフレート形式の最大圧縮率は1032:1です。これは、符号化できる最長のランが258バイトだからです。このようなランごとに少なくとも2ビット(長さコード用の1ビットと距離コード用の1ビット)が必要であり、したがって、4*258 = 1032の非圧縮バイトを1つの圧縮バイトごとにエンコードすることができます。

gzip の結果を gzip で圧縮することで、より多くの圧縮を得ることができます。通常は圧縮率は向上しませんが、非常に長い時間の実行では圧縮率を向上させることができます。

ところで、deflate が使用している LZ77 のアプローチは、ランレングスエンコーディングよりも一般的です。単なる長さの代わりに、長さと距離のペアが使われます。これにより、ある距離の文字列をコピーして戻したり、ランレングスのようにバイトを1の距離で複製したり、3の距離でバイトの3倍のバイトを複製したりすることができます。

6
6
6
2010-05-09 12:03:51 +0000

任意の圧縮アルゴリズムの圧縮率は、(そのデータの長さ以外に)圧縮されるデータの関数となります。

MaximumCompression , 複数ファイル圧縮ベンチマークテストのまとめ

File type : Multiple file types (46 in total) # of files to compress in this test : 510 Total File Size (bytes) : 316.355.757 Average File Size (bytes) : 620,305 Largest File (bytes) : 18,403,071 Smallest File (bytes) : 3,554
``` のようなサンプルの一つを見てください。
4
Advertisement
4
4
2010-05-09 12:44:19 +0000
Advertisement

1つのシンボルだけを含む巨大なファイルは、非常によく圧縮されます。

4
4
4
2013-04-07 13:12:41 +0000

10MBのゼロのファイルをgzip -9で圧縮して10217にしました。そのため、最大の比率は1000倍程度になりそうです。

1
Advertisement
1
1
2016-10-17 02:32:42 +0000
Advertisement

あなたの質問に対する答えは、入力に依存します。圧縮がどのように行われているかを知るには、この6分間のビデオを見てください。 https://www.youtube.com/watch?v=ZdooBTdW5bM

ここから分かることは、圧縮率は各文字の周波数に依存するということです。

Advertisement

関連する質問

6
13
8
6
3
Advertisement
Advertisement