Lempel-Ziv-Markow-Algorithmus

Lempel-Ziv-Markow-Algorithmus

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.

Inhaltsverzeichnis

Merkmale

  • Sehr gute Kompression (durchschnittlich besser als bzip2)
  • Schnelle Dekompression (etwa zweimal so schnell wie bzip2)
  • Es werden sehr große Wörterbücher unterstützt (bis zu einem Gigabyte)
  • ausgeprägte Asymmetrie
    • Für die Dekompression wird nur ein Bruchteil des zur Kompression verwendeten Arbeitsspeichers benötigt (unter Windows etwa 2 MB + Wörterbuchgröße), der Bedarf an Arbeitsspeicher beim Packen beträgt ein Mehrfaches der Wörterbuchgröße.
    • Entpacken benötigt in der Regel einen Bruchteil des Rechenaufwandes des entsprechenden Packvorganges – etwa 10 bis 20-Mal so schnell wie das Komprimieren.

Technik

LZMA nutzt eine verbesserte Variante des LZ77-Algorithmus, Markow-Ketten und einen Bereichskodierer (eine Umsetzung arithmetischen Kodierens) zur Entropiekodierung.

Der Code zum Entpacken von LZMA belegt in kompilierter Form üblicherweise nur etwa 5 kByte. Die beim Entpacken benötigte Menge Arbeitsspeicher hängt von der Größe des beim Packen verwendeten Wörterbuchs ab. Durch die geringe Entpackergröße und den recht geringen Speicherbedarf (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.

Bei LZMA2 kann die gesamte zu komprimierende Datenmenge in Abschnitte aufgeteilt werden. Die Teile können von eigenen Prozessen verarbeitet und später zusammengefügt werden. Es wird von allen Prozessen ein gemeinsames Wörterbuch aufgebaut, jedoch werden die Restdaten bei der Entropiekodierung notwendigerweise als separate Datenströme verarbeitet, wodurch die Suboptimalität der Bereichskodierung (von unter einem Byte pro Teil) entsprechend vielfach zum Tragen kommt und jeder Block noch minimalistische eigene Kopfdaten erhält.[1]

Einsatz

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 (seit 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 (ArchLinux seit März 2010, Quelltextpakete der Metadistribution 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.

Dateiformate

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. (Ähnlich 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 seit Version 12.0 oder 7-Zip seit Version 4.61, beta) wurde einem bestehenden (erweiterbaren) Format LZMA-Unterstützung hinzugefügt.

Software

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:

  • p7zip ist eine aktuelle Portierung des Kommandozeilenwerkzeugs 7z, bietet also vollständige Unterstützung des 7z-Archivformates und dient oft als Unterbau für die 7z-Funktionen graphischer Werkzeuge mit 7z-Unterstützung wie beispielsweise Karchiver und WinRAR.
  • lzip war die erste LZMA-Lösung für Unix-ähnliche Betriebssysteme, die das vertraute Konzept von gzip vollständig kopierte.
  • XZ Utils sind eine Portierung des LZMA-Codes von 7-Zip, die unter Linux für die LZMA-Packmethode eine weitgehend gleiche Handhabung wie die etablierten gzip und bzip2 bieten, welche keine 7z-Archive unterstützen. XZ Utils verwendet aber im Gegensatz zu p7zip meist eine ältere Version des LZMA-Codes.

Weiterhin verwendet GRUB2 seit Juli 2008 standardmäßig LZMA anstatt dem früher verwendeten LZO (vorerst aber nur für i386-pc).

Geschichte

  • Die Referenzimplementierung 7-Zip wurde im Jahr 2000 veröffentlicht.
  • Der Quellcode des LZMA-SDK ist seit dem 23. November 2008 (Version 4.61 beta) gemeinfrei (englisch „public domain“) veröffentlicht.
  • Mit Version 9.04 beta von 7-Zip wurde am Mai 2009 der Algorithmus LZMA2 eingeführt, der eine geringfügig veränderte Variante des ursprünglichen Algorithmus’ darstellt, die mehrfädige Ausführung besser unterstützt und die Behandlung von nicht komprimierbaren Inhalten verbessert.[1][2]

Unix-Plattformen

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 dem rohen LZMA-Datenstrom 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.[3] 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.

Weblinks

Quellen

  1. a b http://sourceforge.net/projects/sevenzip/forums/forum/45797/topic/2965956
  2. http://sevenzip.sourceforge.jp/chm/cmdline/switches/method.htm#LZMA2
  3. Brian Lindholm: New Options in the World of File Compression. In: Linux Gazette. Nr. 162, Mai 2009 (http://linuxgazette.net/162/lindholm.html, abgerufen am 7. Januar 2011).

Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Lempel-Ziv-Markoff-Algorithmus — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markov-Algorithmus — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markow-Ketten-Algorithmus — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markow chain-Algorithm — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markoff-Ketten-Algorithmus — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markov-Ketten-Algorithmus — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markoff chain-Algorithm — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel-Ziv-Markov chain-Algorithm — Lempel Ziv Markow Algorithmus (LZMA) ist ein freier Datenkompressionsalgorithmus, der von Igor Pavlov seit 1998 entwickelt wird und vergleichsweise gute Kompressionsraten und eine hohe Geschwindigkeit beim Entpacken erreicht. Er ist benannt nach… …   Deutsch Wikipedia

  • Lempel — Abraham Lempel Abraham Lempel (* 10. Februar 1936 in Lemberg, Polen) ist ein polnischstämmiger israelischer Informatiker. Er gilt als einer der Väter der LZ Familie der verlustlosen Algorithmen für Datenkompression. Er studierte am Technion in… …   Deutsch Wikipedia

  • Abraham Lempel — (* 10. Februar 1936 in Lemberg, Polen) ist ein polnischstämmiger israelischer Informatiker. Er gilt als einer der Väter der LZ Familie der verlustlosen Algorithmen für Datenkompression. Er studierte am Technion in Haifa im Department for Electr …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”