Was ist die maximale Komprimierungsrate von gzip?

118263
Zombies

Was ist die größte Größe, auf die ein GZIP (zum Beispiel 10kb für ein Beispiel) dekomprimiert werden kann?

45

7 Antworten auf die Frage

85
David Spillett

Es hängt sehr stark von den zu komprimierenden Daten ab. Bei einem Schnelltest mit einer 1-GB-Datei mit Nullen ergibt sich eine komprimierte Größe von ~ 120 KB, sodass Ihre 10-KB-Datei möglicherweise auf ~ 85 MB erweitert werden kann.

Wenn die Daten zum Beispiel eine geringe Redundanz haben, enthält das Archiv zum Beispiel Bilddateien in einem Format, das nativ komprimiert ist (gif, jpg, png, ...), dann kann gzip keine weitere Komprimierung hinzufügen. Für Binärdateien wie Programmdateien wird möglicherweise eine Komprimierung von bis zu 2: 1 angezeigt. Für Text, HTML oder andere Markierungen ist 3: 1 oder 4: 1 oder mehr nicht unwahrscheinlich. In einigen Fällen sehen Sie möglicherweise 10: 1, aber das ~ 8700: 1, das mit einer Datei mit einem einzelnen Symbol gefüllt ist, wird außerhalb von ähnlichen künstlichen Umständen nicht angezeigt.

Sie können überprüfen, wieviele Daten aus dem Entpacken einer gzip-Datei resultieren würden, ohne den unkomprimierten Inhalt tatsächlich auf die Festplatte zu schreiben. gunzip -c file.gz | wc --bytesDabei wird die Datei dekomprimiert, die Ergebnisse jedoch nicht gespeichert, stattdessen übergeben sie wcdiese dann verwerfen Sie sie. Wenn es sich bei komprimiertem Inhalt um eine TAR-Datei handelt, die viele kleine Dateien enthält, kann es sein, dass zum Entpacken des gesamten Archivs merklich mehr Speicherplatz erforderlich ist. In den meisten Fällen ist jedoch die von der Piping- gunzipAusgabe zurückgegebene Anzahl wcso genau, wie Sie es benötigen.

Ich habe gesehen, wie HTML auf 10x erweitert wurde (natürlich waren x3 und x4 die häufigsten!) ... vielleicht eine Menge redundanter Daten für diejenigen, die + 8x explodierten. Ich denke, die betreffende Seite war eine PHP-Infoseite. Zombies vor 14 Jahren 0
Repetitive Markup, wie in der Ausgabe von `phpinfo ()` dargestellt, lässt sich sehr gut komprimieren. Die technischen Informationen in dieser Ausgabe enthalten mehr direkte Wiederholungen als der durchschnittliche Teil der natürlichen Sprache, und die Verteilung des Alphabets ist wahrscheinlich weniger glatt, was dazu beitragen könnte, dass die Huffman-Stufe bessere Ergebnisse erzielt. David Spillett vor 14 Jahren 0
Diese Antwort bezieht sich nicht auf [absichtlich böswillige] (http://en.wikipedia.org/wiki/Zip_bomb) komprimierte Daten. Man kann eine schädliche ZIP-Datei mit einer Größe von 10 KB erstellen, die sich auf etwas mehr als 4 GB erweitern kann. David Schwartz vor 11 Jahren 0
Zip-Bomben dieser Größenordnung sind jedoch auf verschachtelte Archive angewiesen. Wenn Sie also die Datei auspacken, bemerken Sie schon bald etwas Ungewöhnliches. Sie können jedoch als wirksamer DoS-Angriff gegen automatisierte Scanner (für Mail-Dienste usw.) verwendet werden. David Spillett vor 11 Jahren 0
@DavidSpillett: Verschachtelte Zip-Bomben werden im Petabyte-Bereich vergrößert. Darüber spreche ich nicht. Sehen Sie sich auch nur eine einzige Schicht einer typischen Zip-Bombe an. David Schwartz vor 11 Jahren 1
Ich habe festgestellt, dass eine 1GiB-Datei voller Nullen eine komprimierte Datei mit 1042079 Bytes enthält, die viel größer als ~ 120 KB ist. gzip 1.3.12 verwendet. WKPlus vor 6 Jahren 0
@WKPlus - Ich kann das Ergebnis weder mit der gzip-Standardkomprimierung noch mit "--best" oder anderen Implementierungen wie 7zip replizieren. In allen Fällen ist dies nur knapp unter 1 MB. Selbst mit anderen Formaten wie 7z kann ich nur ~ 150Kb erreichen. Selbst unterschiedliche Eingangsgrößen wie 100M liefern nicht das gleiche Ergebnis. Leider habe ich keine Notiz von dem, was ich damals verwendet habe, um zu sehen, wo die Diskrepanz herkommt. Ich werde die Antwort vollständig überarbeiten, wenn ich morgen etwas mehr Zeit habe. David Spillett vor 6 Jahren 0
10
liori

Normalerweise erhalten Sie nicht mehr als 95% Komprimierung (so dass 10 kB komprimierte Daten auf ~ 200 kB dekomprimiert würden), aber es gibt speziell gestaltete Dateien, die exponentiell expandieren. Suchen Sie nach 42.zip, es dekomprimiert auf wenige Petabyte (sinnlose) Daten.

Wikipedia [sagt] (http://en.wikipedia.org/wiki/Zip_bomb) 42.zip enthält "fünf Schichten verschachtelter ZIP-Dateien in Sätzen von 16", sodass dies kein gültiges Beispiel für die Dekomprimierung ist (nur für rekursive) Dekompression). Tgr vor 10 Jahren 4
42.zip ist in der Tat eine Gefahr für Tools, die automatisch rekursive ZIP-Dateien scannen, beispielsweise Virenscanner. thomasrutter vor 10 Jahren 4
Das ist zip, nicht gzip BeniBela vor 7 Jahren 3
6
ioquatix

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

Die maximale Komprimierungsrate des Deflate-Formats beträgt 1032: 1. Dies liegt daran, dass der längste Lauf, der codiert werden kann, 258 Byte beträgt. Für jeden solchen Lauf sind mindestens zwei Bits erforderlich (ein Bit für den Längencode und ein Bit für den Entfernungscode), daher können 4 * 258 = 1032 unkomprimierte Bytes pro komprimiertes Byte codiert werden.

Sie können mehr Komprimierung erzielen, indem Sie das Ergebnis von gzip mit gzippen. Normalerweise verbessert dies die Komprimierung nicht, aber für sehr lange Läufe ist dies möglich.

Übrigens ist der von deflate verwendete LZ77-Ansatz allgemeiner als die Lauflängencodierung. Anstelle einer Länge wird ein Längen- / Entfernungspaar verwendet. Dies ermöglicht das Kopieren eines Strings aus einiger Entfernung oder die Replizierung eines Bytes als Lauflänge für eine Distanz von eins oder die Replikation von Dreifach-Bytes mit einer Distanz von drei usw.

5
nik

Das Kompressionsverhältnis eines beliebigen Kompressionsalgorithmus ist eine Funktion der komprimierten Daten (neben der Länge dieser Daten).

Hier ist eine Analyse bei MaximumCompression .
Sehen Sie sich eines der Beispiele an wie:

Zusammenfassung der Benchmark-Tests zur Komprimierung mehrerer Dateien

Dateityp: Mehrere Dateitypen (insgesamt 46)  Anzahl der Dateien, die in diesem Test komprimiert werden sollen: 510  Gesamtdateigröße (Bytes): 316.355.757  Durchschnittliche Dateigröße (Bytes): 620.305 Größte Datei (Bytes): 18.403.071 Kleinste Datei (Bytes): 3.554 
4
geek

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

3
nikos

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

1
brunsgaard

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

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

Was Sie davon erhalten sollten, ist, dass die Komprimierungsrate von der Häufigkeit jedes Zeichens abhängt. Daher gibt es keine allgemeine Max-Rate. Sie hängt von der Eingabe ab. Für englischen Text sind es etwa 65 Prozent.

Willkommen bei Super User! Bitte zitieren Sie die wesentlichen Teile der Antwort aus den Referenzlinks, da die Antwort ungültig werden kann, wenn sich die verlinkten Seiten ändern. DavidPostill vor 7 Jahren 0
Es wäre genauer zu sagen "Frequenz jeder Zeichenfolge" anstatt "Frequenz jedes Zeichens" JoelFan vor 7 Jahren 0