Wie funktioniert die Dateikomprimierung?

19

So wurde mir heute klar, dass ich die Dateikomprimierung für selbstverständlich halte. Die Fähigkeit, ein paar Dateien zu einer zusammenzufassen und sie kleiner als alle anderen herauszubringen, akzeptiere ich nur als Tatsache, aber wie funktioniert das eigentlich?

Ich habe ein begrenztes Wissen darüber, das etwas damit zu tun hat, alle doppelten Einträge durch Zeiger zu ersetzen, um sie auf diese Weise zu verkleinern, aber darüber hinaus bin ich ziemlich ahnungslos!

Da ich immer offen bin für neues Wissen, wie ich mir die meisten hier vorstelle, dachte ich, ich würde fragen. Also, SuperUser, wie funktioniert die Komprimierung tatsächlich ?

Phoshi
quelle
1
Der Wikipedia-Artikel ist ein guter Anfang, aber es wäre schön, genauere Erklärungen zu haben. Gute Frage (obwohl ich mir sicher war, dass wir eine solche Frage schon hatten, aber das scheint nicht zu sein).
Gnoupi
2
@ Gnoupi: In der Tat war das erste, was ich tat, eine Suche, da ich mir sicher war, dass es eine hier gab. Anscheinend nicht, also habe ich versucht, das zu korrigieren: P
Phoshi 18.04.10
2
Wir haben ein "Was ist" -Tag, wenn Sie Bilder posten und "wot izzit ??" Ich habe bemerkt, dass ein "how-does-it-work" -Tag benötigt wird, aber das ist zu lang und "how-work" klingt dumm. "EXPLAIN" könnte es tun.
Quack Quijote
@ Quack Quijote: Ah, danke. Ich habe in der Autovervollständigung nach einem Tag vom Typ "plz-send-the-explanation" gesucht, aber keinen gefunden.
Phoshi
2
Ich bin ein paar Mal nahe dran, ein "Wie" -Tag zu erstellen ... aber "Erklären" ist wahrscheinlich besser. "Tutorial" und "Howto" und "Anfänger" sind halb anwendbar, aber nicht ganz passend.
Quack Quijote

Antworten:

18

Verlustfreie Kompression

Bei der verlustfreien Komprimierung gehen keine Daten verloren. Alles, was eingegeben wird, kann perfekt abgerufen werden. Dies funktioniert gut für Text- oder Binärdateien, bei denen der kleinste Fehler bemerkt wird.

Bei der Dateikomprimierung werden die Datei genommen, nach Mustern gesucht und diese Muster in etwas anderes übersetzt, das weniger Platz beansprucht.

Zum Beispiel könnte "AAAAAAAA" in "8A" umgewandelt werden.

Zugegeben, so funktioniert das nicht genau, denn dann hast du das Problem, was wäre, wenn "8A" im Klartext wäre. Sie würden die Datei dekomprimieren und es wäre falsch. Ein guter Anfang ist entweder Wikipedia oder der LZW-Datenkomprimierungsalgorithmus .

Es gibt ein paar einfache Pseudocodes für diese Kopie:

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

Bei der gesamten Komprimierung wird ein Suchwörterbuch verwendet, mit dem die Datei komprimiert und dekomprimiert wird. Je größer das Wörterbuch ist, desto mehr können Sie es komprimieren, obwohl Sie auf das Gesetz der sinkenden Renditen stoßen .

Beachten Sie auch, dass die Komprimierung nicht immer zu einer kleineren Datei führt. Es gibt Situationen (bei kleinen Dateien oder beim Komprimieren zufälliger Daten ), in denen Sie nach der Komprimierung keine kleinere Datei erhalten. Es gab einige lustige Herausforderungen in Bezug auf die Fähigkeit, zufällige Daten zu komprimieren.

"Verlustbehaftete" Komprimierung

Das Obige bezieht sich hauptsächlich auf verlustfreie Komprimierung . Andere Komprimierungsarten, die in Video- / Audioanwendungen wie MP3, JPG und h.264 verwendet werden, sind Beispiele für verlustbehaftete Komprimierung .

Bei einer verlustbehafteten Komprimierung werden Daten verworfen, die mit der geringsten Wahrscheinlichkeit bemerkt werden. In der Audiowiedergabe sind dies etwa 30.000 Hertz und unter 100 Hertz, zusammen mit anderen verschiedenen Dingen. In picture (static) werden verschiedene Dinge entfernt und Pixel zusammengeführt, zusammen mit verworfenen Daten.

Verlustbehaftete Komprimierung ist eine Form der Transformationscodierung . Daten werden herausgemittelt, um die Gesamtgröße zu verringern. Beispielsweise können bei einem Block von 10 Pixeln in einem Bild alle leicht unterschiedlichen Farben zu einer Farbe zusammengeführt und somit komprimiert werden.

Bei der Videokomprimierung werden häufig Anweisungen ausgegeben, um nur Pixel neu zu zeichnen, die sich seit dem letzten Frame oder Keyframe geändert haben .

Josh K
quelle
Beachten Sie, dass dies nur eine Erklärung für die verlustfreie Komprimierung ist, für die Sie die genauen Anfangsdaten wiederherstellen können (die höchstwahrscheinlich von Archivierungsprogrammen verwendet werden). Es gibt andere Arten der Komprimierung, bei denen Sie die Qualität für eine kleinere Größe verlieren, z. B. in JPG, MP3 usw.
Gnoupi
Joshs erstes Beispiel ist eine Form einer echten Komprimierungsmethode namens Run-Length Encoding, und "8A" würde auf "181A" komprimiert. Offensichtlich gilt sein letzter Absatz hier; RLE funktioniert am besten bei Daten mit vielen Duplikaten.
Dour High Arch
3
Ich habe die verlustfreien / verlustbehafteten Titel hinzugefügt und noch etwas abgerundet. Es ist gut zu bemerken, dass der beste Weg, dies besser zu verstehen, darin besteht, einfach den Wikipedia-Artikel zu lesen.
Josh K
5

Die Komprimierung funktioniert, indem Muster in den Daten gefunden und diese Muster durch spezielle kleinere Muster ersetzt werden. Dekompression ist das Gegenteil: Finden Sie die speziellen Muster und ersetzen Sie sie durch die größeren Muster, die sie darstellen. Es ist wichtig zu wissen, welche Muster wahrscheinlich sind. Beispielsweise können sich die im Text gefundenen Muster stark von denen in Bildern unterscheiden. Einige Komprimierungstechniken sind verlustbehaftet. Sie garantieren nicht, dass die Erweiterung die Eingabe exakt wiederherstellt. Dies ist normalerweise für analoge Daten wie Musik und Bilder ausreichend, wenn der Verlust gering genug ist. Daten wie Text müssen jedoch verlustfrei komprimiert werden.

Es ist wichtig zu wissen, dass es unmöglich ist, zufällige Daten ohne Verlust mit nur einem Bit zu komprimieren. Betrachten Sie eine Datei mit N Bit Binärdaten. Es gibt 2 ^ N mögliche Dateien. Wenn Sie eine dieser Dateien mit einem einzelnen Bit komprimieren, sodass die komprimierte Datei eine Größe von N-1 Bit hat, gibt es nur 2 ^ (N-1) mögliche komprimierte Darstellungen. Mit anderen Worten, jede mögliche komprimierte Datei muss mehr als eine mögliche nicht komprimierte Datei darstellen. Ohne eine eindeutige komprimierte Darstellung kann der Dekomprimierungsalgorithmus keine verlustfreie Dekomprimierung garantieren.

Fred
quelle
3
Eine Datei ist möglicherweise dekomprimiert (Adjektiv), kann jedoch nicht dekomprimiert werden (Verb). Stattdessen wird es dekomprimiert .
Quack Quijote