Was ist das maximale Komprimierungsverhältnis von gzip?

Was ist die größte Größe, in die ein gzip (z. B. 10 KB für ein Beispiel) dekomprimiert werden kann?

Author: seriousdev, 2010-05-09

7 answers

Update 2020-02-06: Wie in den Kommentaren erwähnt, konnte ich das ursprüngliche Ergebnis nicht mit gzip reproduzieren. Unter der Annahme, dass ich in diesem ursprünglichen Schnelltest versehentlich ein anderes Komprimierungsformat verwendet habe, habe ich mit gzip wiederholt und die folgenden Zahlen entsprechend aktualisiert. Dieses neue Ergebnis stimmt mit der theoretischen maximalen Komprimierung überein, die in anderen Antworten/Kommentaren angegeben ist.


Es hängt sehr stark von den komprimierten Daten ab. Schnelltest bei einer 1-GB-Datei voller Nullen mit einer Standardversion von gzip (mit Standardoptionen oder Angabe von -9) ergibt sich eine komprimierte Größe von ~1018 KB, sodass Ihre 10-KB-Datei möglicherweise auf ~10 MB erweitert werden kann.

Wenn die Daten zunächst nur eine geringe Redundanz aufweisen, enthält das Archiv beispielsweise Bilddateien in einem nativ komprimierten Format (gif, jpg, png, ...), dann kann gzip überhaupt keine weitere Komprimierung hinzufügen. Für Binärdateien wie ausführbare Programme können Sie bis zu 2:1 Komprimierung sehen, für klartext, HTML oder andere Markups 3:1 oder 4: 1 oder mehr ist nicht unwahrscheinlich. In einigen Fällen sehen Sie möglicherweise 10:1, aber das ~1030:1 mit einer Datei, die mit einem einzelnen Symbol gefüllt ist, sehen Sie außerhalb ähnlich künstlicher Umstände nicht.

Sie können überprüfen, wie viele Daten aus dem Entpacken einer gzip-Datei resultieren würden, ohne ihren unkomprimierten Inhalt tatsächlich auf die Festplatte zu schreiben, mit gunzip -c file.gz | wc --bytes - dies wird die Datei dekomprimieren, aber nicht speichern die Ergebnisse, sondern sie an wc übergeben zählen Sie die Anzahl der Bytes, während sie übergeben werden, und verwerfen Sie sie. Wenn komprimierter Inhalt eine TAR-Datei ist, die viele, viele kleine Dateien enthält, können Sie feststellen, dass merklich mehr Speicherplatz zum Entpacken des vollständigen Archivs erforderlich ist, aber unter den meisten Umständen wird die Anzahl, die von der gunzip - Ausgabe über wc zurückgegeben wird, so genau sein, wie Sie benötigen.

 97
Author: David Spillett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-02-06 12:11:40

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 erweitern. Suchen Sie nach 42.zip, es dekomprimiert auf wenige Petabyte (bedeutungslose) Daten.

 10
Author: liori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-05-09 12:04:29

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

Das maximale Komprimierungsverhältnis des Deflate-Formats beträgt 1032: 1. Dies liegt daran, dass der längste Lauf, der codiert 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 Entfernungscode), daher können 4*258 = 1032 unkomprimierte Bytes pro komprimiertem Byte codiert werden.

Sie können mehr Komprimierung erhalten, indem Sie das Ergebnis von gzip gzippen. Normalerweise das verbessert die Komprimierung nicht, aber für sehr lange Auflagen kann es.

Der von deflate verwendete LZ77-Ansatz ist übrigens allgemeiner als die Codierung mit Lauflänge. Anstelle nur einer Länge wird ein Längen - / Distanzpaar verwendet. Dies ermöglicht das Kopieren einer Zeichenfolge aus einiger Entfernung zurück oder das Replizieren eines Bytes wie in Lauflänge für eine Entfernung von eins oder das Replizieren von Dreifachen von Bytes mit einer Entfernung von drei usw.

 8
Author: ioquatix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-23 12:41:41

Das Komprimierungsverhältnis eines beliebigen Komprimierungsalgorithmus 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
 6
Author: nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-02-01 02:37:09

10 MB Nullen in der Datei, komprimieren mit gzip -9 bis 10217. Das maximale Verhältnis scheint also bei 1000x zu liegen.

 5
Author: nikos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-04-07 13:12:41

Eine riesige Datei mit nur einem Symbol wird sehr gut komprimiert.

 4
Author: geek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-05-09 12:44:19

Die Antwort auf Ihre Frage hängt von der Eingabe ab. Um Ihnen eine Vorstellung davon zu geben, wie die Komprimierung erfolgt, sehen Sie sich diese sechs Minuten Videos an.

Https://www.youtube.com/watch?v=ZdooBTdW5bM

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

 2
Author: brunsgaard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-10-17 02:32:42