LZ77
(Lempel-Ziv Algoritması)
@veysiertekin
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,“IEEETrans. InformationTheory, 1978.
Verinin ilk defa verimli şekilde aktarımının yolunu açması, günümüz
internetinin yaygınlaşmasındaki ivmeyi beraberinde getirdi
• 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
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;
*LZ4Yann Collet tarafından 2011 yılında tanıtıldı
Benchmark;
Yahoo’da Hadoop Cluster'larında kullanılan sıkıştırma algoritmalarının oranları
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şı
end
end
Örnek
Arama önbelleği Gelen veri
Satı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)

Lz77 / Lempel-Ziv Algorithm

  • 1.
  • 2.
    TARİHÇE * Abraham Lempeland 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,“IEEETrans. InformationTheory, 1978.
  • 3.
    Verinin ilk defaverimli şekilde aktarımının yolunu açması, günümüz internetinin yaygınlaşmasındaki ivmeyi beraberinde getirdi
  • 4.
    • Günümüzde duyduğumuz/kullandığımızbirç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
  • 5.
    Algoritma Oran SıkıştırmaAç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; *LZ4Yann Collet tarafından 2011 yılında tanıtıldı
  • 6.
  • 7.
    Yahoo’da Hadoop Cluster'larındakullanılan sıkıştırma algoritmalarının oranları
  • 9.
    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şı end end
  • 10.
    Örnek Arama önbelleği Gelenveri Satı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)