Warum ist eine 7zip-Datei größer als die Rohdatei?

Warum ist eine 7zip-Datei größer als die Rohdatei?

Mögliches Duplikat:
Warum komprimiert die ZIP-Komprimierung nichts?

Ich habe versucht, eine EXE-Datei mit 7ZIP zu komprimieren, aber sie ist tatsächlich größer geworden.

Bildbeschreibung hier eingeben

Ist dies das erwartete Ergebnis?

Antwort1

Es läuft auf ein Konzept namensEntropie. SehenWikipedia.

Die Grundidee ist, dass, wenn es eine Komprimierungsoperation gäbe, diestetseine Datei kleiner machen, dann diktiert die Logik, dass diese Komprimierungsoperation in der Lage wäre, jede Datei auf 0 Bytes zu reduzieren und trotzdem alle Daten beizubehalten. Aber das istabsurd, weil wir wissen, dass 0 Bytes überhaupt keine Informationen übermitteln können. Wir haben also gerade bewiesen, dass eskann nicht existierenein Komprimierungsalgorithmus, der seine Eingabe immer kleiner macht, denn wenn das der Fall wäre, könnten alle Informationen in 0 Bytes gespeichert werden - aber 0 Bytes bedeuten, dassAbwesenheitvon Informationen, so dass Sie nicht gleichzeitigNEINInformation undalleInformationen. Daher ist es absurd.

Aufgrund dieses theoretischen Konzepts wird jedes Komprimierungsprogramm, das Sie jemals verwenden,Zunahme die Größe von (oder im besten Fall die gleiche Größe beibehalten)mancheEingabe. Das heißt, bei jedem Komprimierungsalgorithmus, den Sie entwickeln oder verwenden, wird es bestimmte Eingaben geben, die kleiner ausfallen, und andere, bei denen das nicht der Fall ist.

Bereits komprimierte Daten sind im Allgemeinen ein schlechter Kandidat für eine weitere Komprimierung, da die meisten verlustfreien Komprimierungsalgorithmen auf denselben theoretischen Prinzipien basieren.IstEs ist zwar möglich, schlecht komprimierte Daten noch weiter zu komprimieren. Dies ist jedoch weniger effizient, als die Daten von Anfang an mit dem besten verfügbaren Algorithmus aus den Originaldaten zu komprimieren.

Wenn Sie beispielsweise eine 100 MB große Textdatei mit dem normalen Zip-Algorithmus komprimieren, wird sie möglicherweise auf 50 MB komprimiert. Wenn Sie die Zip-Datei dann mit LZMA2 komprimieren, wird sie möglicherweise auf 40 oder 45 MB komprimiert, da LZMA einehöheres Kompressionsverhältnisfür die meisten komprimierbaren Daten als Zip. Es ist also logisch, dass es auch Zip-Daten komprimieren kann, da Zip nicht die gesamte Entropie aus ihnen heraussaugt. Wenn Sie den Zip-Container jedoch vollständig entfernen, können Sie ihn möglicherweise noch kleiner machen, indem Sie den Rohtext mit LZMA2 komprimieren, wodurch möglicherweise etwa 30 bis 35 MB entstehen (dies sind nur „Luftzahlen“, um das Konzept zu veranschaulichen).

Im Fall der Binärdatei, die Sie komprimieren möchten, ist esgrößerweil das 7-Zip-Dateiformat seine eigene interne Struktur erstellen und die Daten der bereits komprimierten ausführbaren Datei in das 7-Zip-Format packen muss. Dies enthält Dinge wie ein Wörterbuch, einen Dateikopf usw. Diese zusätzlichen Daten werden normalerweise durch die Einsparungen beim Komprimieren der Daten selbst mehr als ausgeglichen, aber es scheint, dass die ausführbare Datei, die Sie komprimieren möchten, bereits mit einer Form von LZMA komprimiert ist. Andernfalls würde die Größe der ausführbaren Datei wahrscheinlich schrumpfen oder ganz leicht zunehmen, anstatt sie um 2 MB zu erhöhen (was viel ist).

Antwort2

Die zugrunde liegenden Komprimierungsalgorithmen in 7z sindverlustfrei. Das bedeutet, dass Sie eine Datei iterativ viele Male komprimieren und dekomprimieren können. Außerdem bleibt die Datei nach jeder Iterationgenaudas gleiche.

Leider kann man nicht erwarten,verlustfreiKomprimierungsalgorithmen können viele Male angewendet werden und erzielen immer ein positives Ergebnis. Es gibt eine strikte Grenze, die nicht überschritten werden kann. Diese Grenze hängt grob davon ab, wie eng eine Eingabesequenz mit Zufallsdaten verknüpft ist. Vor allem werden verlustfreie Algorithmen für die Dateikomprimierung, Internet-HTML-Datenübertragungen, Sicherungen und andere Vorgänge verwendet, bei denen eine Ausgabedatei in genau dieselbe ursprüngliche Eingabedatei dekomprimiert werden muss.

Im Kontrast zuverlustfreiKomprimierung, können Sie immer eine Verringerung der Dateigröße nach der Komprimierung erwarten mitverlustbehaftete Komprimierungsalgorithmen. Der Nachteil ist, dass Sie nichtgenauWiederherstellen einer Originaldatei nach einer einzigen Komprimierungs-Dekomprimierungs-Iteration. Diese Algorithmen sind am bekanntesten für die Übertragung und Speicherung von Audio-/Video-/Bilddateien.

bzip2,LZMA,LZMA2und andere Algorithmen von7zFormat sind alleverlustfrei. Daher gibt es eine Grenze, nach der keine weitere Komprimierung mehr möglich ist. Darüber hinaus sind ausführbare Images (.exe) normalerweise stark komprimierte Dateien.7zipwie viele andere Komprimierungstools bettet es einige Metadaten ein, die die Ausgabedatei tatsächlich vergrößern können.

Rätsel: Was wäre, wenn wir einen verlustfreien Algorithmus hätten, der die Dateigröße jederzeit verringern könnte?

In diesem Fall sollten Sie immer feststellen, dass die komprimierte Datei kleiner ist als die Eingabedatei. Unten finden Sie einen Kommentar, warum das nicht möglich ist.

Antwort3

Wenn die ursprüngliche ausführbare Datei bereits komprimiert war (oder stark komprimierte oder nicht komprimierbare Daten enthielt), erhöht sich durch die Komprimierung die Größe.

Antwort4

die komprimierende Idee:

Die Komprimierungssoftware erstellt eine Dateiliste und eliminiert den doppelten Inhalt.

Beim Komprimieren bereits komprimierter Dateien kann es vorkommen, dass die komprimierten Dateien größer werden als das Original.

verwandte Informationen