komprimera | dekomprimera | analysera

> lz77 | sliding | window <

// LZ77 – komprimering med glidande fönster och ordboksreferenser

0 tecken
0 tecken

>> funktioner

[DICTIONARY]

Ordbokskodning

Återanvänder upprepade mönster via referenser med offset och längd.

[SLIDING]

Glidande fönster

Håller ett rörligt fönster för att hitta längsta matchning.

[FOUNDATION]

Grundalgoritm

Utgör grunden för ZIP, GZIP, DEFLATE och PNG.

>> teknisk information

Hur LZ77 fungerar

LZ77 håller ett glidande fönster över nyligen lästa data. För varje position söker algoritmen i fönstret efter den längsta delsträng som matchar. Om den hittar en matchning skrivs en referens (offset, längd, nästa tecken) ut. I annat fall skrivs ett bokstavligt tecken (0,0,tecken) ut. På så sätt ersätts upprepade mönster med korta referenser och man får förlustfri komprimering.

LZ77-exempel

Text: "ABCABCABC"
Window=4, Lookahead=4

Position 0: 'A' - no match
  → (0,0,A)

Position 1: 'B' - no match
  → (0,0,B)

Position 2: 'C' - no match
  → (0,0,C)

Position 3: 'ABC' - matches at offset 3
  → (3,3,A)

Position 7: 'BC' - matches at offset 3
  → (3,2,)

Output: (0,0,A)(0,0,B)(0,0,C)(3,3,A)(3,2,)

Varför använda LZ77?

  • Förlustfri komprimering
  • Ingen förhandskunskap om dataformat krävs
  • Anpassar sig efter datans mönster
  • Relativt enkel implementation
  • Bas för många moderna komprimeringsalgoritmer

>> vanliga frågor

Vad är LZ77?

LZ77 är en universell, förlustfri datakomprimeringsalgoritm som publicerades av Abraham Lempel och Jacob Ziv 1977. Den ersätter upprepade sekvenser i dataströmmen med referenser till tidigare förekomster i den okomprimerade strömmen.

Hur fungerar det glidande fönstret?

Det glidande fönstret består av en sökbuffer (redan bearbetad data) och en lookahead-buffer (data som ska komprimeras). Algoritmen letar i sökbuffer efter den längsta matchningen med början av lookahead, och skriver sedan ut en referens eller ett bokstavligt tecken.

LZ77 jämfört med modern komprimering?

LZ77 utgör grunden för många moderna komprimeringsmetoder. DEFLATE, som används i ZIP och GZIP, kombinerar LZ77 med Huffman-kodning. LZSS minskar redundansen i LZ77, medan LZ78 och LZW bygger upp ordboken på andra sätt med liknande principer.

Vilka fönsterstorlekar rekommenderas?

För generell data är typiska fönsterstorlekar 32–64 KB. Större fönster hittar fler matchningar, men kräver mer minne och tid. DEFLATE använder 32 KB. Lookahead-buffer är vanligtvis 256–512 byte. Den bästa storleken beror på repetitionsmönstren i din data.