Mögliches Duplizieren:
Warum komprimiert die ZIP-Komprimierung nichts?
Ich habe versucht, eine .exe-Datei zu komprimieren, aber sie wurde tatsächlich größer.
Ist das das erwartete Ergebnis?
Mögliches Duplizieren:
Warum komprimiert die ZIP-Komprimierung nichts?
Ich habe versucht, eine .exe-Datei zu komprimieren, aber sie wurde tatsächlich größer.
Ist das das erwartete Ergebnis?
Antworten:
Es kommt auf ein Konzept namens Entropie . Siehe Wikipedia .
Die Grundidee ist , dass, wenn eine Kompressionsoperation existiert, der konnte immer eine Datei kleiner, dann Logik diktiert, die den Betrieb der Kompressions machen der Lage wäre , eine beliebige Datei auf 0 Byte zu reduzieren und trotzdem alle Daten behalten. Das ist aber absurd , weil wir wissen, dass 0 Bytes überhaupt keine Informationen übermitteln können. Wir haben also gerade bewiesen, dass es keinen Komprimierungsalgorithmus geben kann, der seine Eingabe immer kleiner macht, da in diesem Fall Informationen in 0 Bytes gespeichert werden könnten - 0 Bytes implizieren jedoch das Fehlen von Informationen. t gleichzeitig keine Informationen und alle Informationen. Daher ist es absurd.
Aufgrund dieses theoretischen Konzepts wird jedes Komprimierungsprogramm, das Sie jemals verwenden , die Größe einiger Eingaben erhöhen (oder bestenfalls die gleiche Größe beibehalten) . Das heißt, für jeden von Ihnen entworfenen oder verwendeten Komprimierungsalgorithmus gibt es bestimmte Eingaben, die kleiner ausfallen, und einige, die dies nicht tun.
Bereits komprimierte Daten sind im Allgemeinen ein schrecklicher Kandidat für eine weitere Komprimierung, da die meisten verlustfreien Komprimierungsalgorithmen auf denselben theoretischen Prinzipien beruhen. Es ist möglich, schlecht komprimierte Daten noch weiter zu komprimieren. Dies ist jedoch weniger effizient, als es einfach mit dem besten verfügbaren Algorithmus aus den ursprünglichen Daten zu komprimieren.
Wenn Sie beispielsweise eine Textdatei mit 100 MB haben und diese mit dem regulären Zip-Algorithmus komprimieren, wird sie möglicherweise auf 50 MB komprimiert. Wenn Sie die Zip-Datei dann mit LZMA2 komprimieren, können Sie sie möglicherweise auf 40 oder 45 MB reduzieren, da LZMA für die meisten komprimierbaren Daten eine höhere Komprimierungsrate aufweist als Zip. Es liegt also nahe, dass es auch Zip-Daten komprimieren kann, da Zip die gesamte Entropie nicht vollständig heraussaugt. Wenn Sie den Zip-Container jedoch vollständig entfernen, können Sie ihn möglicherweise noch verkleinern, indem Sie den Rohtext mit LZMA2 komprimieren, was möglicherweise eine Größe in der Größenordnung von 30 bis 35 MB ergibt (dies sind nur "Luftzahlen", um das Konzept zu veranschaulichen). .
Im Fall der Binärdatei, die Sie komprimieren möchten, ist sie größer, da das 7-Zip-Dateiformat eine 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 Datei-Header und so weiter. Diese zusätzlichen Daten werden in der Regel durch die Einsparungen beim Komprimieren der Daten selbst mehr als ausgeglichen. Es scheint jedoch, 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 verringert oder nur geringfügig erhöht, anstatt sie um 2 MB zu erhöhen (was sehr viel ist).
2^(n+1)-1
mögliche Nachrichten mit einer Größe von n Bits oder weniger. Unser Algorithmus muss jedes dieser Elemente einer eindeutigen Ausgabe zuordnen. Wenn auch nur einer dieser Werte auf einen Wert mit weniger Bits abgebildet wird, muss zwangsläufig ein anderer Wert auf einen Wert mit mehr Bits abgebildet werden.
Die zugrunde liegenden Komprimierungsalgorithmen in 7z sind verlustfrei . Dies bedeutet, dass Sie eine Datei mehrere Male iterativ komprimieren und dekomprimieren können. Außerdem bleibt die Datei nach jeder Iteration exakt gleich.
Leider können Sie nicht erwarten, dass ein verlustfreier Komprimierungsalgorithmus viele Male angewendet wird, wobei immer ein positives Ergebnis erzielt wird. Es gibt eine strenge Grenze, über die nicht gesprungen werden kann. In etwa hängt diese Grenze davon ab, wie eng eine Eingabesequenz aus Zufallsdaten besteht. Vor allem werden verlustfreie Algorithmen für die Komprimierung von Dateien, die Übertragung von Internet-HTML-Daten, Sicherungen und andere Vorgänge verwendet, bei denen erwartet wird, dass eine Ausgabedatei in genau dieselbe ursprüngliche Eingabedatei dekomprimiert wird.
Im Gegensatz zur verlustfreien Komprimierung können Sie nach der Komprimierung mit verlustbehafteten (oder verlustbehafteten) Komprimierungsalgorithmen immer mit einer Verringerung der Dateigröße rechnen . Der Nachteil ist, dass Sie eine Originaldatei nach einer einzelnen Iteration von Komprimieren und Dekomprimieren nicht exakt wiederherstellen können . Diese Algorithmen sind am bekanntesten für Audio- / Video- / Bildübertragung und -speicherung.
bzip2 , LZMA , LZMA2 und andere vom 7z- Format verwendete Algorithmen sind alle verlustfrei . Daher wird es eine Grenze geben, nach der es nicht mehr komprimiert werden kann. Darüber hinaus sind ausführbare Abbilder (.exe) in der Regel stark komprimierte Dateien. 7zip bettet wie viele andere Komprimierungsprogramme einige Metadaten ein, wodurch die Ausgabedatei vergrößert werden kann.
In diesem Fall wird immer angezeigt, dass die komprimierte Datei kleiner als die Eingabedatei ist. Siehe einen Kommentar unten, warum es nicht möglich ist.
Die meisten Kompressionsalgorithmen verwenden , was ist eine Symboltabelle genannt, basicly nur Peices der Datei , um sie als Elemente verwendet es CAN komprimieren. Dies erzeugt natürlich einen gewissen Overhead in der Datei, führt jedoch normalerweise zu einer viel kleineren Datei.
In bereits komprimierten Dateien werden immer noch eine Reihe von Symbolen erstellt, aber es gibt nur sehr wenige, die die Größe reduzieren können. In Ihrem Fall befindet sich die Symboltabelle der bereits komprimierten Datei wahrscheinlich in der Nähe von 2 MB oder wahrscheinlich mehr, wenn sie komprimiert werden konnte.