LZMA ( englanniksi Lempel-Ziv-Markov chain-Algorithm ) on Igor Pavlovin vuodesta 1996 tai 1998 lähtien kehittämä tiedonpakkausalgoritmi [1] . Sama kirjoittaja käyttää 7-Zip-arkistointityökalussa pakattujen arkistojen luomiseen 7z-muodossa.
Algoritmi perustuu sanakirjatietojen pakkausjärjestelmään , joka on samanlainen kuin LZ77 :ssä , ja tarjoaa korkean pakkaussuhteen (yleensä korkeamman kuin bzip2 :lla pakattuna ) ja mahdollistaa myös erikokoisten sanakirjojen käytön (jopa 4). GB [2] ).
Lisäksi lzma on avoimen lähdekoodin komentorivitietojen pakkausapuohjelma LZMA SDK : sta , joka toimii .lzma-muotoisten tiedostojen kanssa .
Avoimen lähdekoodin LZMA-kehityspaketti, joka on kirjoitettu C++ -kielellä , käyttää parannettua LZ77 -pakkausalgoritmia , jota on täydennetty erillään olevalla koodausalgoritmilla sekä erityisiä menettelyjä binääritiedostojen käsittelyyn.
LZMA tukee erilaisia hash-ketjujen , binääripuiden ja etuliitepuiden muunnelmia sanakirjahakualgoritmien perustana.
LZMA SDK sisältää myös BCJ/BCJ2-algoritmin, joka on toteutettu x86- , ARM- , PowerPC- , IA-64- ja ARM Thumb -arkkitehtuuriprosessoreille. Siinä hyppypisteet normalisoidaan ennen pakkausta - eli esimerkiksi x86:lle, tämä tarkoittaa, että ohjeet lähi- ja ehdollisiin hyppyihin ja funktiokutsuihin muunnetaan lomakkeesta suhteellisella siirtymällä "palaa 1665 tavua" muotoon, jossa on absoluuttinen osoite "siirry osoitteeseen 5554".
7- Zipissä toteutettu BCJ2-algoritmi käyttää 32-bittistä osoitusta. UPX - suoritettavassa pakettiohjelmassa osoitus riippuu arkkitehtuurin tyypistä (esimerkiksi 16-bittistä osoitetta käytetään DOS - suoritettaville tiedostoille ).
Toteutuksessa, joka on siirretty CPL :stä julkiseen käyttöön version 4.61 beta -version jälkeen, on seuraavat ominaisuudet:
LZMA-pakkauskoodin koko on noin 5 kt; dynaaminen muistin kulutus riippuu sanakirjojen koosta. Nämä ominaisuudet mahdollistavat pakkauksen purkamisen sulautetuissa järjestelmissä .
Microsoft Windows -ominaisuuksien käyttö lähdekoodissa vaikeuttaa Unix-versioiden luomista ohjelmasta. On kuitenkin olemassa kaksi toimivaa siirrettyä versiota: p7zip enemmän tai vähemmän siirretyt versiot 7z- ja 7za-komentoriviohjelmista POSIX-järjestelmille ( GNU/Linux , Solaris , OpenBSD , FreeBSD , Cygwin ja muut), Mac OS X ja BeOS .
On myös virallinen kannettava toteutus, LZMA Utils, joka on suunniteltu luomaan inline-kompressoreita, kuten gzip [3] . Vuodesta 2008 lähtien sitä on käytetty yhä enemmän paketinhallintajärjestelmissä - erityisesti dpkg :ssa ja RPM :ssä .
7-Zip käyttää melko joustavaa arkistomuotoa, ja jotkin kolmannen osapuolen apuohjelmat tukevat myös sitä (esimerkiksi 7z-luku tukee WinRAR :ia ).
Mac OS X:lle on myös 7-Zip-portti nimeltään Compress, joka on tällä hetkellä melko keskeneräinen työkalu. Mac OS X:ssä on myös p7zip- ja 7zX- koontiversiot .
LZMA:n kanssa työskennelläkseen kirjoittaja tarjoaa monialustaisen SDK:n, jolla on yllä olevat ominaisuudet. Suurin osa SDK:sta on kirjoitettu C++-kielellä ja alun perin jaettu GNU LGPL:n ehtojen mukaisesti. Kannattaa huomioida muutama seikka:
Jotkut verkkolaitteet (kuten US Robotics 9105 ja 9106) käyttävät muokattua Linuxia laiteohjelmistona , joka käynnistetään pakatusta tiedostojärjestelmästä. LZMA-algoritmia käytetään Zlibin sijaan tiedostojärjestelmän pakkausalgoritmina. Tyypillisesti tämä tiedostojärjestelmä on squashfs , jossa on LZMA- korjaus [4] [5] .
Lisäksi LZMA:ta käytetään UEFI -toteutuksissa yhtenä pakkausalgoritmeista.
LZMA2 on uusi versio LZMA-algoritmista. Tällä algoritmilla on seuraavat edut LZMA-algoritmiin verrattuna:
Puristusmenetelmät _ | |||||||
---|---|---|---|---|---|---|---|
Teoria |
| ||||||
Häviötön |
| ||||||
Audio |
| ||||||
Kuvat |
| ||||||
Video |
|
Arkiston muodot | |
---|---|
Vain arkistointi | |
Vain pakkaus | |
Arkistointi ja pakkaus | |
Ohjelmistojen pakkaus ja jakelu |