Loading AI tools
Algorithmus zur Datenkompression Aus Wikipedia, der freien Enzyklopädie
Der Lempel-Ziv-Markow-Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Wiktorowitsch Pawlow seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach Abraham Lempel und Jacob Ziv, die den LZ77-Algorithmus entwickelt haben, und nach Andrei Andrejewitsch Markow, nach dem die Markow-Ketten benannt wurden.
Der Algorithmus arbeitet mit einem Wörterbuchverfahren ähnlich LZ77 und kann damit im Prinzip als Weiterentwicklung von Deflate gesehen werden.
Die Kompression anhand von Lempel-Ziv-Markow wurde als LZMA implementiert und als LZMA2 weiterentwickelt.
LZMA nutzt eine verbesserte Variante des LZ77-Algorithmus, Markow-Ketten und einen Bereichskodierer (eine Umsetzung arithmetischen Kodierens) zur Entropiekodierung.
LZMA komprimiert die Daten linear in einem einzigen Block bzw. Schritt. Hierdurch ist die Komprimierung durch LZMA immer auf einen Prozessorkern beschränkt, d. h., LZMA ist nicht parallelisierbar.
Der wesentliche Vorteil von LZMA ist, dass der ausführbare Code zum Entpacken von LZMA-komprimierten Daten typischerweise nur etwa 5 kByte belegt. Die beim Entpacken benötigte Menge Arbeitsspeicher hängt von der Größe des beim Packen erzeugten Wörterbuchs ab. Durch die geringe Entpackergröße und den recht geringen Speicherbedarf beim Entpacken (besonders mit kleineren Wörterbüchern) eignet sich das Verfahren besonders gut für eingebettete Anwendungen.
In der 7-Zip-Umsetzung werden verschiedene Varianten von Hash-Knoten, Binärbäumen und Patricia-Tries für die Wörterbuch-Suche genutzt.
LZMA2 sieht im Gegensatz zu LZMA per Entwurf die gleichzeitige Ausführung auf mehreren Prozessorkernen vor. Hierzu teilt LZMA2 die gesamte zu komprimierende Datenmenge in Abschnitte auf, die jeweils von separaten Prozessen, bzw. Threads komprimiert werden. Die spätere Dekompression erfolgt ebenfalls parallel. Bei der Kompression bauen alle Prozesse ein gemeinsames Wörterbuch auf. Die Restdaten der Entropiekodierung werden zwangsläufig als separate Datenströme verarbeitet. Die Suboptimalität der Bereichskodierung beträgt unter ein Byte pro Eingangsdatenabschnitt. Jeder erzeugte Block des Komprimats erhält einen minimalen Datenkopf.[1] Durch die mögliche Parallelisierung wird das Packen und Entpacken auf Multi-Prozessor- und Multicore-Systemen z. T. erheblich beschleunigt.
Neben dem Einsatz mit speziellen Dateiformaten für komprimierte Daten wurde LZMA-Unterstützung auch in viele andere Systeme integriert. So steht bei der transparenten Kompression und Dekompression ausführbarer Dateien mit UPX (ab Version 2.92, beta) oder Upack und bei komprimierenden Dateisystemen wie SquashFS (oder CramFS, mit entsprechenden Patches) auch der LZMA zur Wahl. Bei einer großen Anzahl von Linux-Distributionen (Arch Linux seit März 2010[2] (seit 2020 allerdings Zstandard), Quelltextpakete der Distribution Gentoo Linux, Slackware Linux seit 8. Mai 2009, openSUSE seit dem 27. März 2008, Pardus’ Paketverwaltung und das Debian-Paketverwaltungssystem bieten Unterstützung, …) können mittlerweile LZMA-komprimierte Installationspakete verwendet werden. Auch Software-Installationssysteme für Windows wie das Nullsoft Scriptable Install System und Inno Setup erstellen eine Art erweiterter selbstentpackender Archivdateien, die mit LZMA komprimiert sein können.
Ursprünglich konnte es nur mit dem neuen 7z-Format von 7-Zip genutzt werden. Mittlerweile stehen einige weitere Formate zur Verfügung.
Im Falle von xz wurde extra im Hinblick auf LZMA-Unterstützung ein neues Format geschaffen, das speziell für die ausschließliche Verwendung mit LZMA vorgesehen ist (ähnliches gilt auch für das lzip-Format). Im Falle des neuen ALZip-Formates (.egg
-Dateien) ist im Zuge einer mit der Verfügbarkeit modernerer Verfahren angezeigten Modernisierung der Dateiformatfähigkeiten im Rahmen eines Kompatibilitätsbruches beim Format ein neues, moderneres (flexibleres) Dateiformat geschaffen worden, das nun hauptsächlich mit LZMA-komprimierten Inhalten verwendet wird.
Im Falle von Zip2 (zum Beispiel mit WinZip ab Version 12.0 oder 7-Zip ab Version 4.61, beta) wurde einem bestehenden (erweiterbaren) Format LZMA-Unterstützung hinzugefügt.
Die Referenzimplementierung von LZMA ist in freier Software erfolgt. Sie kam zunächst in Form der 7-Zip-Programme und wird mittlerweile auch isoliert in Form des LZMA SDK veröffentlicht. Die freie Referenzbibliothek zur LZMA-Kompression wurde in C++ geschrieben und unterstützt Multithreading.
Zurzeit gibt es drei funktionierende Übertragungen auf Unix-ähnliche Plattformen:
Weiterhin verwendet GRUB2 seit Juli 2008 standardmäßig LZMA anstatt des früher verwendeten LZO (vorerst aber nur für i386-PC).
Da im Quelltext von 7-Zip ausgedehnter Gebrauch von Windows-spezifischen Eigenschaften gemacht wird, verging nach dessen Erstveröffentlichung einige Zeit bis zum Erscheinen einer Unix-kompatiblen Version, obwohl es sich um freie Software handelt. LZMA wurde erstmals 2004 mit einem Port der Kommandozeilenversion von 7-Zip namens p7zip auf Unix-Plattformen nutzbar. Im selben Jahr wurde auch das (wesentlich portablere) LZMA-SDK verfügbar, bei dem das Kommandozeilenprogramm „lzma_alone“ enthalten ist. lzma_alone wurde ähnlich gzip oder bzip2 mit tar zusammen verwendet, um Datei-Metadaten und Rechteinformationen aus Unix-Datei- und Betriebssystemen aufnehmen zu können. Weniger als ein Jahr nach der Erstveröffentlichung des LZMA SDK veröffentlichte Lasse Collin die LZMA Utils, die (zunächst nur aus einem Satz Wrapper-Skripte bestehend) eine für Unix-Nutzer vertraute (gzip-ähnliche) Benutzerschnittstelle zu lzma_alone schuf.
2008 veröffentlichte Antonio Diaz lzip, welches anstatt des rohen LZMA-Datenstromes ein Containerformat mit Prüfsummen und Magischen Zahlen bot. Damit war eine vollständige Lösung zur Nutzung von LZMA in Unix-Manier gegeben, die sich allerdings nur teilweise durchsetzen konnte, bevor die LZMA Utils entsprechend weiterentwickelt wurden und nun unter dem Namen „XZ Utils“ ähnliches boten.[4] Die XZ Utils scheinen sich nun als LZMA-Implementierung für Unix-ähnliche Plattformen durchzusetzen. Ihr xz-Dateiformat wird nun auch von den Referenzimplementierungen unterstützt.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.