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

Was ist die maximale Kompressionsrate von gzip?

Was ist die größte Größe, auf die ein gzip (sagen wir 10kb, um ein Beispiel zu geben) dekomprimiert werden kann?

Antworten (7)

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

Update 2020-02-06: Wie in den Kommentaren erwähnt, konnte ich das ursprüngliche Ergebnis mit gzip nicht reproduzieren. Da ich davon ausgehe, dass ich in dem ursprünglichen Schnelltest versehentlich ein anderes Kompressionsformat verwendet habe, habe ich den Test mit gzip wiederholt und die Zahlen unten entsprechend aktualisiert. Dieses neue Ergebnis stimmt mit der in anderen Antworten/Kommentaren angegebenen theoretischen maximalen Kompression überein.


Es hängt sehr stark von den zu komprimierenden Daten ab. Ein schneller Test mit einer 1 GB großen Datei voller Nullen unter Verwendung einer Standardversion von gzip (mit Standardoptionen oder unter Angabe von -9) ergibt eine komprimierte Größe von ~1018 KB, so dass Ihre 10 KB große Datei potenziell auf ~10 MB anwachsen könnte.

Wenn die Daten von vornherein eine geringe Redundanz aufweisen, z. B. wenn das Archiv Bilddateien in einem Format enthält, das von Haus aus komprimiert ist (gif, jpg, png, …), dann fügt gzip möglicherweise gar keine weitere Komprimierung hinzu. Für Binärdateien wie ausführbare Programme können Sie eine Komprimierung von bis zu 2:1 sehen, für reinen Text, HTML oder andere Markierungen sind 3:1 oder 4:1 oder mehr nicht unwahrscheinlich. In manchen Fällen kann man 10:1 sehen, aber die ~1030:1, die man bei einer Datei mit einem einzigen Symbol sieht, ist etwas, das man außerhalb ähnlich künstlicher Umstände nicht sehen wird.

Sie können mit gunzip -c file.gz | wc --bytes überprüfen, wie viele Daten beim Entpacken einer gzip-Datei anfallen würden, ohne den unkomprimierten Inhalt auf die Festplatte zu schreiben - dies dekomprimiert die Datei, speichert aber nicht die Ergebnisse, sondern übergibt sie an wc, das die Anzahl der Bytes zählt und sie dann verwirft. Wenn der komprimierte Inhalt eine tar-Datei ist, die viele kleine Dateien enthält, kann es sein, dass Sie merklich mehr Speicherplatz benötigen, um das gesamte Archiv zu entpacken, aber in den meisten Fällen ist die Zählung, die von der Piping gunzip-Ausgabe durch wc zurückgegeben wird, so genau, wie Sie sie brauchen.

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

Normalerweise erhalten Sie nicht mehr als 95% Komprimierung (so dass 10kB gzipped Daten auf ~200kB dekomprimiert würden), aber es gibt speziell gestaltete Dateien, die exponentiell expandieren. Suchen Sie nach 42.zip, es dekomprimiert zu einigen Petabytes an (bedeutungslosen) Daten.

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

Wörtlich zitiert aus https://stackoverflow.com/a/16794960/293815

Das maximale Kompressionsverhältnis des Deflate-Formats beträgt 1032:1. Das liegt daran, dass der längste Lauf, der kodiert werden kann, 258 Bytes beträgt. Für jeden solchen Lauf werden mindestens zwei Bits benötigt (ein Bit für den Längencode und ein Bit für den Abstandscode), daher können 4*258 = 1032 unkomprimierte Bytes pro ein komprimiertes Byte kodiert werden.

Sie können eine stärkere Komprimierung erreichen, indem Sie das Ergebnis von gzip gzippen. Normalerweise verbessert das die Komprimierung nicht, aber bei sehr langen Läufen kann es das.

Übrigens, der von deflate verwendete LZ77-Ansatz ist allgemeiner als die Lauflängenkodierung. Statt nur einer Länge wird ein Längen-/Abstandspaar verwendet. Dies ermöglicht das Kopieren einer Zeichenkette aus einer gewissen Entfernung, oder das Replizieren eines Bytes wie bei run-length mit einer Entfernung von eins, oder das Replizieren von Tripeln von Bytes mit einer Entfernung von drei, usw.

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

Das Kompressionsverhältnis eines jeden Kompressionsalgorithmus ist eine Funktion der zu komprimierenden Daten (neben der Länge dieser Daten).

Hier ist eine Analyse bei MaximumCompression , Schauen Sie sich eines der Beispiele an wie, Zusammenfassung der Benchmark-Tests zur Komprimierung mehrerer Dateien

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
4
4
2010-05-09 12:44:19 +0000

Eine große Datei, die nur ein Symbol enthält, wird sehr gut komprimiert.

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

10 MB Nullen in der Datei, komprimiert mit gzip -9 auf 10217. Das maximale Verhältnis scheint also etwa 1000x zu sein.

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

Die Antwort auf Ihre Frage ist abhängig von der Eingabe. Um Ihnen eine Vorstellung davon zu geben, wie die Komprimierung durchgeführt wird, sehen Sie sich dieses sechsminütige Video an. https://www.youtube.com/watch?v=ZdooBTdW5bM

Was Sie daraus entnehmen sollten, ist, dass die Komprimierungsrate von der Häufigkeit jedes Zeichens abhängt, daher gibt es keine generelle Maximalrate, sie hängt von der Eingabe ab, für englischen Text beträgt sie etwa 65 Prozent.