web-dev-qa-db-ja.com

ファイル圧縮はどのように機能しますか?

それで、私は今日、ファイル圧縮を当然のことと思っていることに気づきました。いくつかのファイルを1つにまとめて、どのファイルよりも小さくする機能は、私が事実として受け入れているものですが、実際にはどのように機能しますか?

私はそれについての知識が限られており、重複するすべてのエントリをポインタに置き換えてそのように縮小することと関係がありますが、それを超えるとかなり無知です!

私は常に新しい知識を受け入れているので、ここにいる私たちのほとんどがそうであると想像しているように、私は尋ねたいと思いました。それで、スーパーユーザー、圧縮はどのように機能しますか実際には

19
Phoshi

可逆圧縮

可逆圧縮とは、データが失われない場所です。入力されたものはすべて完全に取得できます。これは、最小のエラーが認識されるテキストファイルまたはバイナリファイルに適しています。

ファイル圧縮は、ファイルを取得してパターンをスキャンし、それらのパターンをより少ないスペースで済む別のパターンに変換することで機能します。

たとえば、「AAAAAAAA」を「8A」に変えることができます。

確かに、それが正確に機能する方法ではありません。「8A」が平文である場合はどうなるかという問題があるからです。あなたはファイルを解凍するでしょう、そしてそれは間違っているでしょう。開始するのに適した場所は、ウィキペディアまたは LZWデータ圧縮アルゴリズム のいずれかです。

以下にコピーされたこのためのいくつかの単純な擬似コードがあります:

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

すべての圧縮は、ファイルの圧縮と解凍に使用されるルックアップディクショナリを使用します。辞書が大きいほど、圧縮することができますが、 収穫逓減の法則 に遭遇します。

また、圧縮によってファイルが常に小さくなるとは限らないことにも注意してください。 (小さなファイルの場合、または ランダムデータを圧縮する場合 )圧縮後にnot小さなファイルを取得する状況があります。ランダムデータを圧縮する機能に関して、いくつかの楽しみがありました 課題

「非可逆」圧縮

上記は主に 可逆圧縮 に関係します。 MP3、JPG、h.264などのビデオ/オーディオアプリケーションで使用される他のタイプの圧縮は、例です 不可逆圧縮

非可逆圧縮は、気付かれる可能性が最も低いデータを破棄することで機能します。オーディオでは、これは他のさまざまなものとともに、約30,000Hrzおよび100Hrz未満の音です。画像(静的)では、さまざまなものを削除し、データを破棄するとともに、ピクセルをマージします。

非可逆圧縮は 変換コーディング の形式です。データを平均化して全体のサイズを縮小します。たとえば、画像内の10ピクセルのブロックでは、わずかに異なる色すべてを1つの色にマージして、圧縮することができます。

ビデオ圧縮では、多くの場合、最後のフレーム以降に変更されたピクセルのみを再描画するように指示が出されます。つまり、 keyframe です。

18
Josh K

圧縮は、データ内のパターンを見つけて、これらのパターンを特別な小さなパターンに置き換えることで機能します。解凍は逆です。特別なパターンを見つけて、それらが表すより大きなパターンに置き換えます。どのパターンがありそうかを知ることは重要です。たとえば、テキストに見られるパターンは、画像に見られるパターンとはかなり異なる場合があります。一部の圧縮技術は不可逆です。拡張によって入力が正確に回復されることを保証するものではありません。損失が十分に小さければ、これは通常、音楽や画像などのアナログデータには問題ありません。ただし、テキストなどのデータはロスレス技術で圧縮する必要があります。

ランダムなデータを1ビットでも失うことなく圧縮することは不可能であることを理解することが重要です。 Nビットのバイナリデータを含むファイルについて考えてみます。 2 ^ N個の可能なファイルがあります。これらのファイルのいずれかを1ビットで圧縮し、圧縮ファイルのサイズがN-1ビットである場合、可能な圧縮表現は2 ^(N-1)のみです。言い換えると、可能な圧縮ファイルはそれぞれ、複数の可能な非圧縮ファイルを表す必要があります。一意の圧縮表現がないと、解凍アルゴリズムはロスレス解凍を保証できません。

5
Fred