web-dev-qa-db-ja.com

7zip圧縮されたファイルがrawファイルよりも大きいのはなぜですか?

可能性のある複製:
なぜZip圧縮は何も圧縮しないのですか?

.exeファイルを7zip圧縮しようとしましたが、実際には大きくなりました。

enter image description here

これは期待される結果ですか?

37
IMB

それはentropyと呼ばれる概念に帰着します。 Wikipedia を参照してください。

基本的な考え方は、常にファイルを小さくできる圧縮操作が存在した場合、ロジックは、その圧縮操作でファイルを0バイトに減らし、すべてのデータを保持します。しかし、これはabsurdです。これは、0バイトでは情報をまったく伝達できないことがわかっているためです。そのため、ここでは存在できない圧縮アルゴリズムが常に入力を小さくすることを証明しました。これが当てはまる場合は、情報を保存できるためです。 0バイト-0バイトは情報の不在を意味するため、no情報とall情報。したがって、それはばかげています。

この理論上の概念により、これまでに使用したすべての圧縮プログラムは、サイズを増加します(せいぜい、同じサイズを維持します)some入力。つまり、設計または使用する圧縮アルゴリズムについては、出力が小さくなる特定の入力と、そうでない入力があります。

ほとんどのロスレス圧縮アルゴリズムは同じ理論的原理に基づいているため、すでに圧縮されたデータは一般に、さらなる圧縮のひどい候補です。不十分に圧縮されたデータをさらに圧縮することは可能です。ただし、これは、元のデータから利用可能な最良のアルゴリズムで単純に圧縮するよりも効率が劣ります。

たとえば、100 MBのテキストファイルがあり、通常のZipアルゴリズムを使用して圧縮した場合、50 MBに圧縮される可能性があります。次に、LZMA2を使用してZipファイルを圧縮すると、LZMAはZipよりも圧縮率の高いデータに対して高い圧縮率を持っているため、40 MBまたは45 MBに減少する可能性があります。したがって、Zipはすべてのエントロピーを完全に吸収しないため、Zipデータも圧縮できるのは当然のことです。ただし、Zipコンテナを完全に削除した場合、LZMA2で生のテキストを圧縮することにより、コンテナをさらに小さくできる可能性があり、30〜35 MB程度のものが生成される可能性があります(これらは概念を説明するための単なる「空気番号」です)。 。

7-Zipファイル形式は独自の内部構造を作成し、既に圧縮された実行可能ファイルのデータをパックする必要があるため、圧縮しようとしているそのバイナリの場合、大きいです。 7-Zip形式。これには、辞書、ファイルヘッダーなどが含まれます。これらの余分なデータは通常、データ自体を圧縮することによる節約によって相殺される以上のものですが、圧縮しようとしている実行可能ファイルはすでに何らかの形式のLZMAで圧縮されているようです。それ以外の場合は、実行可能ファイルのサイズを2 MBずつ増やすのではなく、小さくするか、わずかに大きくする可能性があります(これは大量です)。

78
allquixotic

7zで使用されている基本的な圧縮アルゴリズムは lossless です。これは、ファイルを何度も繰り返し圧縮/解凍できることを意味します。さらに、各反復の後、ファイルはまったく同じのままです。

残念ながら、lossless圧縮アルゴリズムを何度も適用して、常に肯定的な結果を期待することはできません。飛び越えられない厳しい境界があります。おおまかに言って、この境界は、入力シーケンスがランダムデータをどれだけ密接にアンサンブルするかに依存します。何よりも、ロスレスアルゴリズムは、ファイル圧縮、インターネットHTMLデータ転送、バックアップ、および出力ファイルがまったく同じ元の入力ファイルに解凍されることを期待するその他の操作に使用されます。

lossless圧縮とは対照的に、圧縮後に lossful(または不可逆)圧縮アルゴリズム 。欠点は、1回の圧縮/解凍の反復後に元のファイルを正確に復元できないことです。これらのアルゴリズムは、オーディオ/ビデオ/画像の送信と保存で最も有名です。

bzip2[〜#〜] lzma [〜#〜]LZMA2および7z形式で使用されるその他のアルゴリズムはすべてロスレス。したがって、圧縮できなくなるまでの制限があります。その上、実行可能イメージ(.exe)は通常、高度に圧縮されたファイルです。 7Zip他の多くの圧縮ツールが一部のメタデータを埋め込むため、実際には出力ファイルが大きくなる可能性があります。

頭の体操:常にファイルのサイズを小さくできるロスレスアルゴリズムがある場合はどうなるでしょうか。

この場合、圧縮ファイルが入力ファイルよりも小さいことが常にわかります。それが不可能な理由については、以下のコメントを参照してください。

7
oleksii

元の実行可能ファイルが既に圧縮されている(または非常に圧縮されたデータまたは圧縮できないデータが含まれている)場合は、圧縮するとサイズが大きくなります。

6
PhonicUK

ほとんどの圧縮アルゴリズムは、シンボルテーブルと呼ばれるものを使用します。基本的に、要素として使用するファイルの一部を[〜#〜] can [〜#〜]圧縮します。もちろん、これによってファイルにオーバーヘッドが生じますが、通常はファイルがはるかに小さくなります。

すでに圧縮されたファイルでは、一連のシンボルが作成されますが、サイズを小さくできるものはほとんどありません。あなたの場合、すでに圧縮されたファイルのシンボルテーブルは、おそらく2 MB程度か、何らかの圧縮ができた場合はそれ以上になります。

2
Chad Harrison

圧縮のアイデア:

圧縮ソフトウェアはファイルのリストを作成し、重複するコンテンツを排除します。

すでに圧縮されたファイルを圧縮すると、元のファイルよりも圧縮ファイルが大きくなる場合があります。

0
fromnaboo