Lz77 / Lempel-Ziv Algorithm

10
LZ77 (Lempel-Ziv Algoritması) @veysiertekin

Transcript of Lz77 / Lempel-Ziv Algorithm

Page 1: Lz77 / Lempel-Ziv Algorithm

LZ77(Lempel-Ziv Algoritması)

@veysiertekin

Page 2: Lz77 / Lempel-Ziv Algorithm

TARİHÇE

* Abraham Lempel and Jacob Ziv tarafından 1977-78 yılları arasında yapılan çalışmanın ürünü olduğu için LZ77 adı verilmiştir. [1]

* Algoritmaya kod adının verilmesindeki neden birçok varyasyonu arasından ayırt etmek.

* Sınırsız veri akışının (yani verinin gerçek boyutu bilinmeden) daha az yer kaplayacak şekilde kodlanmasını sağlar.

* Kayıpsız bir sıkıştırma algoritmasıdır.

[1] J.Ziv and A.Lempel, “Compression of individual sequences by variable rate coding, “IEEE Trans. Information Theory, 1978.

Page 3: Lz77 / Lempel-Ziv Algorithm

Verinin ilk defa verimli şekilde aktarımının yolunu açması, günümüz internetinin yaygınlaşmasındaki ivmeyi beraberinde getirdi

Page 4: Lz77 / Lempel-Ziv Algorithm

• Günümüzde duyduğumuz/kullandığımız birçok sıkıştırma-kodlama algoritmasının temelinde yer almakta:

zip, bzip, gzip, WinRAR, LZMA,LZO, LZ4, JPEG, PNG, GIF …

1- LZ ile başlayanlar hemen hemen aynı algoritmayı farklı yöntemler kullanarak uyguluyorlar (ör: direk dönüşüm yerine binary hale çevirip algoritmayı uygulamak yada verinin işleniş sıralamalarında değişiklik yapmak gibi) 2- Diğer algoritmalar (zip, JPEG vs) bu algoritma üzerine Huffman kodlaması gibi ek yöntemlere başvuruyorlar

Page 5: Lz77 / Lempel-Ziv Algorithm

Algoritma Oran Sıkıştırma Açma

memcopy 1.000 4200 MB/s 4200 MB/s

LZ4* 2.101 385 MB/s 1850 MB/s

LZO 2.06 2.108 350 MB/s 510 MB/s

QuickLZ 1.5.1.b6 2.238 320 MB/s 380 MB/s

Snappy 1.1.0 2.091 250 MB/s 960 MB/s

LZF v3.6 2.073 175 MB/s 500 MB/s

zlib 1.2.8 -1 2.730 59 MB/s 250 MB/s

LZ4* HC 2.720 22 MB/s 1830 MB/s

zlib 1.2.8 -6 3.099 18 MB/s 270 MB/s

Kaynak: https://github.com/Cyan4973/lz4

Benchmark;

*LZ4 Yann Collet tarafından 2011 yılında tanıtıldı

Page 6: Lz77 / Lempel-Ziv Algorithm

Benchmark;

Page 7: Lz77 / Lempel-Ziv Algorithm

Yahoo’da Hadoop Cluster'larında kullanılan sıkıştırma algoritmalarının oranları

Page 8: Lz77 / Lempel-Ziv Algorithm
Page 9: Lz77 / Lempel-Ziv Algorithm

Algoritma (Pseudo Code)

begin görünümü gelen veri ile doldur while (görünüm boş olmadığı sürece) do begin görünümün başındaki veriden arama tamponundaki en uzun eşleşmeyi bul i := arama tamponunda bulunan kaydın indeksi j := eşleşme uzunluğu X := eşleşen veriden hemen sonraki veri çıktıyaAktar(i,j,X)

arama tamponunun başlangıç indeksini eşleşen veriden sonrasına taşı

endend

Page 10: Lz77 / Lempel-Ziv Algorithm

Örnek

Arama önbelleği Gelen veriSatır 121110 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 … Çıktı1 a a b b c a b c b b (0,0,a)

2 a a b b c a b c b b c (1,1,b)

3 a a b b c a b c b b c a c (1,1,c)

4 a a b b c a b c b b c a c b c (4,2,c)

5 a a b b c a b c b b c a c b c c a ∅ (6,4,c)

6 a a b b c a b c b b c a c b c c a ∅ (4,2,c)

7 b c a b c b b c a c b c c a ∅ (5,1,null)