LZMA
Лемпел(Abraham Lempel)-Зиф(Jacob Ziv)-Марков-алгоритъм или съкратено (LZMA) е алгоритъм за компресиране на данни разработван от 1998 и използван в 7z формата на архиватора 7-Zip. Той използва компресия, базирана на речник, подобна на LZ77, и има висока степен на компресиране (обикновено по-висока от тази на bzip2) и плаваща големина на речника за компресиране (до 1 ГБ).
Описание
[редактиране | редактиране на кода]LZMA използва подобрен LZ77 алгоритъм, заедно с диапазонно кодиране.
Поток от данни, брой повторения и място изглежда се компресират отделно.
7-Zip модел
[редактиране | редактиране на кода]Модел на LZMA е включен като част от 7z и 7-Zip. Изходния код се разпространява под GNU LGPL лиценз.
Библиотеката с отворен код използваща LZMA компресия е написана на C++ и има:
- Скорост на компресиране: около 1 МБ за секунда на 2 ГХерцов процесор
- Скорост на декомпресиране: между 10 и 20 МБ за секунда на 2 Гхерцов процесор
- Поддържа многопоточност.
7-Zip използва няколко варианта на хеш вериги (hash chains), двоични дървета (binary trees) и Дърво на Радикс (Patricia tries) за основа на речниковия алгоритъм на търсене.
Декомпресиращия код на LZMA е около 5КБ а необходимата памет за декомпресиране е свързана с големината на плаващия прозорец (sliding window) използван при компресирането. Малката големина и ниските изисквания за памет, при малка големина на речника, правят декомпресиращия LZMA алгоритъм подходящ за вградени системи.
Преносимост
[редактиране | редактиране на кода]Широкото използване на специфични за Microsoft Windows елементи в основата на изходния код, правят по-трудно пренасянето към Юникс въпреки че е свободен софтуер.
Има два варианта работещи под Юникс-съвместими платформи:
- p7zip, е базиран на приложенията за командна линия на 7-Zip – 7z и 7za. p7zip създава стандатни 7z архиви където LZMA може да се комбинира с други филтри.
- LZMA Utils, използва само LZMA код и е създаден само за работа с чист LZMA поток подобно на gzip и bzip2. За архивиране на множество файлове
lzma
се използва заедно с .tar. На изхода има чист LZMA без заглавна ингормация (header information).
За отбелязване е че данните създадени от 7-Zip и LZMA Utils не са съвместими. т.е данните от едната програма не се разпознават от другата.
Употреба
[редактиране | редактиране на кода]Програми използващи LZMA алгоритъма:
- Nullsoft Scriptable Install System
- Inno Setup
- cramfs и SquashFS, чрез кръпки
- lrzip („long range zip“, или „LZMA rzip“)
- PyLZMA, Python интерфейс към LZMA SDK на Игор Павлов
- FreeArc Архив на оригинала от 2007-07-06 в Wayback Machine., архиватор и Haskell интерфейс към LZMA SDK
- Pascal LZMA SDK – написан на Паскал
- CompreXX, с интеграция в Explorer подобно на ZIP папките в Windows XP
- InstallAware, за Windows Installer
- Peazip, GUI към 7z и POSIX 7z
- UPX, след версия 2.92 (beta)
- install4j