LZSS

LZSS ( Lempel-Ziv-Storer-Szymanski , Lempel-Ziv-Storer-Szymansky [1] ) on häviötön tiedonpakkausalgoritmi, joka on johdettu LZ77 -menetelmästä . Luonut vuonna 1982 James Storer ja Thomas Szymanski. LZSS kuvattiin artikkelissa "Data compression via textual substitution" (tietojen pakkaus tekstin korvaamisen kautta), joka julkaistiin ACM-lehdessä (1982, PP. 928-951). [2]

LZSS on sanakirjan pakkausmenetelmä. Se yrittää korvata toistuvat merkkijonot sanakirjaviitteellä.

Suurin ero alkuperäisen LZ77:n ja LZSS:n välillä on, että LZ77-menetelmässä sanakirjaviitteen syöttö voi olla pidempi kuin sen korvaama merkkijono (eli tällaisen viittauksen syöttäminen tekee pakatusta fragmentista pidemmän kuin pakkaamaton). . LZSS-menetelmässä tällaiset viittaukset jätetään pois, jos merkkijonon pituus on pienempi kuin jokin asetus ("break even"). Lisäksi LZSS käyttää yhden bitin lippua osoittamaan, onko pakatun virran seuraava fragmentti literaali (tavu) vai sanakirjaviittaus (pituus- ja offset-arvopari).

Toteutukset

Monet suositut 1990-2000-lukujen arkistaattorit, kuten PKZip , ARJ , RAR , ZOO , LHarc , käyttävät LZSS-menetelmää LZ77:n sijaan pääasiallisena datan pakkausalgoritmina. Literaalien ja pituussiirtymäparien koodausmenetelmät eroavat usein, mutta Huffman-koodia käyttävä entropiakoodaus on suositumpaa . Monet toteutukset perustuvat Haruhiko Okumuran koodiin vuodelta 1989. [3] [4]

Pakkausesimerkki

Syötä teksti, 177 tavua:

0: Olen Sam 9: 10: Sam olen 19: 20: Se Sam-I-am! 35: Se Sam-I-am! 50: En pidä 64: se Sam-I-am! 79: 80: Pidätkö vihreistä munista ja kinkusta? 112: 113: En pidä niistä, Sam-I-am. 143: En pidä vihreistä munista ja kinkusta.

Kahden tavun vähimmäissovituksella saamme 94 tavua (lukuun ottamatta 12 tavua fragmenttityyppisiä lippuja). Parit (offset, pituus) on merkitty suluissa:

0: Olen Sam 9: 10: (5.3) (0.4) 16: 17: Tuo(4,4)-minä olen!(19,16)En pidä 45: t(21,14) 49: Oletko(58,5) vihreitä munia ja kinkkua? 78: (49.14) ne,(24.9).(112.15)(92.18).


Muistiinpanot

  1. TIEDÄ INTUITTI | Luento | Korvaus- tai sanakirjapohjaiset tiedon pakkausalgoritmit. Lempel-Ziv -menetelmät . Haettu 17. lokakuuta 2018. Arkistoitu alkuperäisestä 17. lokakuuta 2018.
  2. Storer, James A. Tietojen pakkaus tekstin korvaamisen kautta  (määrittämätön)  // Journal of the ACM . - 1982. - lokakuu ( osa 29 , nro 4 ) . - S. 928-951 . - doi : 10.1145/322344.322346 .
  3. Simtel.net peili. Haruhiko Okumura toteutus 1989. Arkistoitu 3. helmikuuta 1999.
  4. Haruhiko Okumura. Tietojen pakkaamisen historia Japanissa. Arkistoitu 10. tammikuuta 2016.

Linkit

Lähdekoodi LZSS-algoritmin toteuttamiseen