Veri Sktrma Algoritmalar Ders 2 Szlk Tabanl Teknikler
Veri Sıkıştırma Algoritmaları Ders 2: Sözlük Tabanlı Teknikler Yrd. Doç. Dr. Altan MESUT
Sözlük Tabanlı Teknikler n n Bir metinde sık tekrar eden kelimeler, bir görüntü dosyasında tekrar eden piksel grupları gibi, yinelenen kalıpların belirlenmesi, ve bu kalıplardan bir sözlük oluşturularak, her kalıbın sözlükteki sıra numarasının kodlanmasına dayalı tekniklerdir. Bu teknikler statik, yarı-statik ve dinamik olarak 3 grupta incelenir. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 2
Statik Sözlük Yaklaşımı n n n Sıkıştırılacak her verinin aynı sözlük ile sıkıştırılması statik sözlük yaklaşımıdır. Kaynak hakkında önceden bilgi varsa elverişlidir. Daha çok ASCII standardında kodlanmış metin tipinde verilerin sıkıştırılmasında kullanılır. n 6. 11. 2020 Örneğin noktadan sonra boşluk (. _) veya virgülden sonra boşluk (, _) gibi her tip metinde sıkça geçen karakter grupları, Türkçe metinler için ‘ve’, ‘veya’, ‘ler’, ‘lar’ gibi, ve İngilizce metinler için ‘and’, ‘the’, ‘pre’, ‘tion’ gibi kelime ve karakter grupları, ASCII tablosunda genellikle kullanılmayan karakterlerin yerine yerleştirilebilir. Bölüm 3 - Sözlük Tabanlı Teknikler 3
Digram Kodlaması n Statik sözlük yaklaşımını temel alan digram kodlamasında, sözlük kaynaktaki tüm harflerden ve digram denilen ikili karakter gruplarından meydana gelir. n 6. 11. 2020 Örneğin 0 -127 arasındaki ASCII karakterler değiştirilmeyip, 128 -255 arasındaki birçok metinde hiç kullanılmayan ASCII karakterleri digram’lar ile değiştirilebilir. Bölüm 3 - Sözlük Tabanlı Teknikler 4
Statik Sözlük Yaklaşımının Eksileri n n n Kullanılmadığını düşündüğümüz karakter eğer metinde kullanıldıysa hataya yol açacaktır. Kaynak sözlük ile uyumlu değilse (İngilizce sözlük ile Türkçe metin sıkıştırma), sıkıştırma performansı düşük olacaktır. Bu durumlardan kaçınmak için: n n 6. 11. 2020 256 karakterlik ASCII tablosu 512 yada 1024 karaktere genişletilebilir. Fakat bu durumda her karakter 8 bit yerine 9 yada 10 bit ile ifade edilecektir. Hangi karakterlerin kullanılıp hangilerinin kullanılmadığı, sıkıştırılacak metin önceden bir defa okunarak tespit edilebilir. Yapılacak bu ilk geçişte sık tekrar edilen karakter grupları da tespit edilip, sözlük buna göre oluşturulursa sıkıştırma performansı artacaktır. Bu yaklaşıma yarı-statik sözlük yaklaşımı denir. Bölüm 3 - Sözlük Tabanlı Teknikler 5
Yarı-Statik Sözlük Yaklaşımı n Kaynak ile sözlüğün uyumsuzluğunu gidermek için yapılabilecek en iyi şey, sıkıştırılacak her kaynak için özel bir sözlük oluşturmaktır. Sözlük ilk geçişte oluşturulur, veri ikinci geçişte sıkıştırılır. n Sözlüğün aktarılması veya saklanması için yapılacak masraf dikkate alınmalıdır. n Hangi karakter gruplarının eklenmesi gerektiğine karar vermek zordur. n 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 6
SSDC & ISSDC n Digram Kodlaması’nı temel alan iki yarıstatik sıkıştırma yöntemi geliştirilmiştir. SSDC (Semi-Static Digram Coding) iki geçişli çalışır. Sıkıştırma oranı düşük, sıkıştırma hızı yüksektir. n ISSDC (Iterative Semi-Static Digram Coding) çok geçişli bir algoritmadır. Sıkıştırma oranı yüksek, fakat sıkıştırma hızı düşüktür. n SSDC ve ISSDC açma algoritmalarının her ikisi de tek geçişli çalıştıkları için oldukça Bölüm 3 - Sözlük Tabanlı Teknikler 7 6. 11. 2020 hızlıdırlar. n
Digram Kodlayıcısı girdi: abracadabra BAŞLA 5 6 27 5 6 çıktı: Digram’ın ilk elemanı için bir karakter oku sözlük Sıra Karakter veya Digram 0 a 1 b 2 c 3 d 4 r 5 ab 6 ra 7 ad 6. 11. 2020 Digram’ın ikinci elemanı için bir karakter oku Digram’ın ilk karakterinin sözlük sırasını hedefe yaz H Bu digram Sözlükte var mı? E Sözlükteki sırasını hedefe yaz Digram’ın ikinci karakterini bir sonraki digram’ın ilk karakteri yap H Dosya Sonu ? E SON Bölüm 3 - Sözlük Tabanlı Teknikler E Dosya Sonu ? H 8
Digram Kodlayıcısı BAŞLA Digram’ın ilk elemanı için bir karakter oku Digram’ın ikinci elemanı için bir karakter oku Digram’ın ilk karakterinin sözlük sırasını hedefe yaz Digram’ın ikinci karakterini bir sonraki digram’ın ilk karakteri yap H 6. 11. 2020 Dosya Sonu ? E H Bu digram Sözlükte var mı? E Sözlükteki sırasını hedefe yaz Kaynak dosyadaki tüm karakterlerin sözlükteki sıralarını Hedef dosyaya yaz SON Bölüm 3 - Sözlük Tabanlı Teknikler E Dosya Sonu ? H 9
SSD C Kaynak: Calgary Corpus’taki “book 1” dosyası (768. 771 byte) <Y 1874> <A T. HARDY> <T Madding Crowd(Penguin 1978)> <C i> <P 51> DESCRIPTION OF FARMER OAK -AN INCIDENT When Farmer Oak smiled, the corners of his mouth. . . . BAŞLA Kaynak ve Hedef dosyalarını aç Kaynak dosyada kullanılan farklı karakterlerin sayısını bul ve bu değeri hedef dosyanın başına yaz Kullanılan birbirinden farklı karakterleri sözlüğün ilk kısmına ekle Kullanılan karakter çiftlerinin kullanım sıklığını bul, büyükten küçüğe doğru sırala ve sözlüğün ikinci kısmını en sık kullanılan karakter çiftleri (digram’lar) ile doldur Hedef: R R(82) etaonhisrdluwmcgfy, pb. 'vk. I"TBHAx. OS!; ? WP+CGMq. N<>j. EYFLDz JR 1: 234 U 056789 VK()Q=X&*e &*ehe hetth ad int s eran s, hn wre ondatouedy on ihaenr ngo toas b mhiisitor farf esstteveofsemeg cea. a tinellshwantle dalh ro lnobe p neldeowl omurriidaimahoadlilyeeoocochce ruteotwhlo ewi. . Thryhtrdrtsuevns ewi. yfo Isssawesipe. I. . evns 04 ; ED? 10! … !: 7410 -¢În +‘I)l X ; FDEJ 10+j 10) B; 173$+: )#/ #5 5!: -3: . . . . 6. 11. 2020 (439. 511 byte) Hedef dosyaya sözlüğü yaz Kaynak dosyadaki tüm karakterlerin sözlükteki sıralarını Hedef dosyaya yaz Dosyaları kapat SON Sıra Karakter (ASCII Değeri) Tekrar Sayısı 0 BOŞLUK (32) 125551 1 e (101) 72431 2 t (116) 50027 3 a (97) 47836 4 o (111) 44795 5 n (110) 40919 6 . . İLK GEÇİŞ 80 & (38) Sözlük Oluşturma 1 81 * (42) 1 Sıra Digram Tekrar Sayısı 82 e_ 20452 83 he 17470 84 _t 17173 85 th 15995 86 _a 13649 İKİNCİ GEÇİŞ 87. . . Digram Kodlaması . . 254 ev 1113 255 ns 1100 Sözlük boyutu = 82+(2 x 174) = 430 10
SSDC ile sıkıştırma ve açma sözlük Orijinal : abracadabra Sıkıştırılmış : 5 6 7 4 5 6 Açılmış : abracadabra 6. 11. 2020 Bölüm 1 - Giriş sıra karakter tekrar sayısı 0 a 5 1 b 2 2 r 2 3 c 1 4 d 1 sıra karakter tekrar sayısı 5 ab 2 6 ra 2 7 ca 1 11
ISSDC ile sıkıştırma ve açma sözlük Orijinal : abracadabra sıra karakter tekrar sayısı 0 a 5 1 b 2 2 r 2 3 c 1 4 d 1 sıra karakter tekrar sayısı 8 5 ab 2 6 ra 2 8 7 ca 1 8 (5)(6) 2 9 (7)(4) 1 10 (8)(9) 1 3. geçiş 11 (10)(8) 1 4. geçiş 5 6 745 6 9 8 10 Sıkıştırılmış : 8 11 10 Açma işlemi tek geçişte yapılabilir 8 8 9 5 6 745 6 Açılmış : abracadabra 6. 11. 2020 Bölüm 1 - Giriş 1. geçiş 2. geçiş 12
Sözlükler S S D C 0 81 82 255 en sık kullanılan 174 digram 0 81 82 511 en sık kullanılan 430 digram 1 I S S D C 00 2 3 4 5 6 7 8 9 10 eklenecek en sık kullanılan 157 140 123 106 89 72 54 36 18÷ ÷ / 12 10 5 4 3 9===18 8 7 6 =18 17 17 17 digram sayısı 174 (boş yer / kalan iterasyon) 81 82 98 115 132 149 166 183 201 219 237 255 17 17 17 18 18 0 1 2 3 4 5 6 7 8 9 10 43 43 43 81 kullanılan karakterler 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 13
Dinamik Sözlük Yaklaşımı Sözlük, sıkıştırma işlemi devam ederken oluşturulur (tek geçişte hem sözlük oluşturulur hem sıkıştırma yapılır) n Dinamik sözlük yaklaşımı, statik sözlük yaklaşımı ve yarı-statik sözlük yaklaşımının avantajlı yönlerini bir araya getirmiştir. Statik sözlük yaklaşımı gibi tek geçişlidir dolayısıyla hızlıdır ve yarı-statik sözlük yaklaşımı gibi kaynağa özel sözlük üretir dolayısıyla sıkıştırma oranı yüksektir. n En çok kullanılan dinamik sözlük yaklaşımları LZ 77 türevi olan LZMA ve LZ 78 türevi olan Bölüm 3 - Sözlük Tabanlı Teknikler 14 6. 11. 2020 LZW’dir. n
LZ 77 Algoritması n n Jacob Ziv ve Abraham Lempel tarafından 1977 yılında geliştirilmiştir. LZ 77 yaklaşımında sözlük, daha önce kodlanmış serinin bir parçasıdır. Algoritmadaki arama tamponunun büyüklüğü, daha önce kodlanmış serinin ne büyüklükte bir parçasında arama yapılacağını belirler. Arama tamponu büyütüldükçe, sıkıştırma oranı artar, fakat sıkıştırma 4 artar. 7 zamanı da [7, 4, C(a)] a b r a c a d a b r a a a [0, 0, C(a)] arama tamponu 6. 11. 2020 ileri tampon Bölüm 3 - Sözlük Tabanlı Teknikler 15
LZ 77’nin Dezavantajları - 1 n n Eğer arama tamponunda aranan tekrarlar bulunamazsa kullanılan üçlü sistemin 1 byte’lık veriyi [0, 0, C(a)] şeklinde temsil etmesi nedeniyle sıkıştırma yerine genişleme meydana gelir. Storer ve Szymanski tarafından 1982’de geliştirilen LZSS olarak adlandırılan bir yaklaşım, bu israfı tek bitlik bir bayrak kullanarak ortadan kaldırmıştır. Bu bayrak kendisinden sonra gelen verinin tek bir karakter mi yoksa bir karakter katarını ifade eden veri mi olduğunu belirler. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 16
LZ 77’nin Dezavantajları - 2 n Eğer arama tamponu boyutu yeteri kadar büyük değilse tekrarlar bulunamaz. n n Örneğimizde arama tamponunun boyutunu 6 olarak kabul edilseydi sıkıştırılacak benzerlik bulunamazdı. Arama tamponu çok büyük ise, bu defa arama zamanı (dolayısıyla sıkıştırma zamanı) artacaktır. Her ne kadar geliştirilen efektif arama yaklaşımları ile bu zaman bir ölçüde Bölüm 3 - Sözlük Tabanlı Teknikler 6. 11. 2020 kısaltılabilmişse de, arama tamponu yine de n 17
LZ 77’nin Dezavantajları - 3 n LZ 77 yaklaşımının tıkandığı bir nokta vardır: n Eğer periyodik bir dizimiz varsa ve periyodu arama tamponundan büyükse, hiç benzeşme bulunamaz ve her karakter için fazladan gönderilen veriler nedeniyle sıkıştırma yerine genişletme yapılır. . g h a b c d e f g h a b. . . arama tamponu 6. 11. 2020 ileri tampon Bölüm 3 - Sözlük Tabanlı Teknikler 18
LZMA (Lempel Ziv Markov Algorithm) n 1996 -1998 arasında geliştirilen 7 -Zip sıkıştırma uygulamasında kullanılan LZMA, çok büyük bir arama tamponu ve sıra kodlaması (range encoder: Aritmetik kodlamanın bit tabanlı olanı) kullanan bit tabanlı bir algoritmadır. n http: //mattmahoney. net/dc/dce. html#Sectio n_523 n http: //en. wikipedia. org/wiki/Lempel%E 2%8 0%93 Ziv%E 2%80%93 Markov_chain_algo rithm 6. 11. 2020 Bölüm 1 - Giriş 19
LZ 78 Algoritması n n n Lempel ve Ziv, LZ 77’nin dezavantajlarını görmüşler ve 1978 yılında arama tamponu kullanmayan yeni bir algoritma yaratmışlardır. Bu algoritma ve geliştirilmiş biçimleri, LZ 78 ailesi olarak bilinir. LZ 78, hem kodlayıcı (encoder) hem de çözücü (decoder) tarafından aynı sözlüğün oluşturulması prensibine dayanır. Kaynaktan okunan sembol grupları sözlükte bulunan en uzun ön eklerinin indeksi ile birleştirilerek [i, c] ikilileri ile kodlanır. i : yeni girişin sözlükte bulunan en uzun ön ekinin indeksi n c : bu ön eki takip eden karakter Bölüm 3 - Sözlük Tabanlı Teknikler 6. 11. 2020 n 20
LZ 78 Sıkıştırma Algoritması Örnek “altan altan altan” Sözlük sırası Temsil ettiği Kodu 1 a [0, C(a)] 2 l [0, C(l)] 3 t 4 Sözlük sırası Temsil Kodu ettiği 8 ta [3, 1] 9 n_ [5, 6] [0, C(t)] 10 alt a [0, 1] 11 5 n [0, C(n)] 6 _ [0, C(_)] 7 al [1, 2] 6. 11. 2020 Sözlük Temsil sırası ettiği Kodu 15 alta [10, 1] 16 n_a [9, 1] [7, 3] 17 lta [13, 1] an [4, 5] 18 n_al [16, 2] 12 _a [6, 1] 19 tan [8, 5] 13 lt [2, 3] 20 _al [12, 2] 14 an_ [11, 6] 21 tan [8, 5] Bölüm 3 - Sözlük Tabanlı Teknikler 21
LZ 78 Algoritmasının Dezavantajı Sözlük sınırsız bir şekilde büyümektedir. n Pratikte, sözlüğün büyümesi belirli bir noktada durdurulmalı, ya gereksiz girdiler elenmeli, yada kodlama sabit sözlük şemasına zorlanmalıdır. n 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 22
LZW Algoritması n n n Terry Welch 1984’te LZ 78 yaklaşımını geliştirmiş, ve ortaya çıkan yeni algoritma LZW olarak kabul görmüştür. Patent koruması altında olan LZW hem sıkıştırma hem de açma performansı açısından LZ 78 ailesinin en iyisi olmayı başarmıştır. Her tip veri üzerinde iyi sonuçlar veren bir algoritma olduğu için, GIF, Unix Compress, V. 42 gibi birçok algoritma LZW’yi temel almıştır. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 23
LZW Sıkıştırma Algoritması n n LZW algoritmasında, LZ 78’de kullanılan ikili yapısındaki ikinci elemanın gerekliliği ortadan kalkmıştır. Kodlayıcı, önce kaynaktaki tüm karakterlerden bir sözlük oluşturarak gönderir. Bu karakterler; A. B. 6. 11. 2020 Bir ön geçişle bulunur ve gönderilir. ASCII Tablosundaki tüm karakterler kullanılır. (ön geçiş yapılmaz ve karakterler gönderilmez) Bölüm 3 - Sözlük Tabanlı Teknikler 24
LZW Sıkıştırma Algoritması Örnek “altan altan altan”Sözlük Temsil Sözlük Temsil sırası ettiği 32 _ 258 ta 265 alta 272 ltan 97 a 259 an 266 an_ 273 n_alt 108 l 260 n_ 267 _al 274 tan_ 110 n 261 _a 268 lta 275 _alt 116 t 262 alt 269 an_a 256 al 263 tan 270 altan 257 lt 264 n_a 271 n_al Gönderilen: 97, 108, 116, 97, 110, 32, 256, 258, 260, 262, 259, 261, 257, 266, 265, 264, 268, 271, 263, 267, 263 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 25
LZW Algoritmasının Dezavantajı n LZ 78’de olduğu gibi, LZW algoritmasında da sözlük büyüklüğünün sürekli artması sorun yaratmaktadır. n n 6. 11. 2020 LZW tabanlı çalışan GIF, ve Unix Compress, sözlük büyüklüğü 2 b değerine eriştiğinde (b değeri önceden belirlenir), sözlüğü iki katına (2 b+1) çıkartır. Sözlük daha da büyüdüğünde, statik sözlük yaklaşımına döner. Eğer sıkıştırma oranı belli bir seviyenin altında kaldıysa sözlüğü boşaltarak, sözlük oluşturma işlemini yeniden başlatır. British Telecom’un geliştirdiği BTLZ standartında ise en az kullanılan girdi çıkartılarak sözlük küçültülür. Bölüm 3 - Sözlük Tabanlı Teknikler 26
Yarı-Statik ile Dinamik Karşılaştırması n n Yarı-statik algoritmalar sıkıştırılmış bir dosyanın ortasından açma işlemine başlayabilirler, ama dinamik algoritmalar bunu yapamazlar. Dinamik sıkıştırma tek geçişli bir yöntem olması sebebiyle iki (yada daha çok) geçişli yarı-statik sıkıştırmadan genellikle daha hızlıdır. Açma işlemi her ikisinde de tek geçişle halledildiği için açma zamanları neredeyse aynıdır. Sıkıştırma oranları birbirine yakındır. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 27
DEFLATE Phil Katz tarafından 90’lı yılların ortalarında geliştirilmiş kayıpsız veri sıkıştırma formatıdır. n LZSS algoritmasını ve Huffman Kodlamasını birlikte kullanarak sıkıştırma yapar. n LZW patent koruması altında iken, DEFLATE ücretsiz olduğu için yaygın kullanım alanı bulmuştur: n Winzip, gzip, jar dosyaları ve PNG kayıpsız standardı Bölüm 3 - Sözlük Tabanlı Teknikler DEFLATE 6. 11. 2020 görüntü sıkıştırma n 28
DEFLATE n n n Sıkıştırılacak olan veri birbirini takip eden bloklar kümesi olarak düşünülür. Her blok için oluşturulan Huffman ağacı bir önceki ve bir sonraki bloktan bağımsızdır. Sıkıştırılabilen blokların büyüklüğü değişkendir. Deflate algoritması Huffman ağacının etkili kodlama yapamayacak kadar büyüdüğünü gördüğünde, yeni bir Huffman ağacı oluşturmak için o bloğu sonlandırarak yeni bir blok başlatır. Sıkıştırılamayan blokların boyu ise 65. 535 byte ile sınırlıdır. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 29
DEFLATE n n n Her blok, sıkıştırılmış verilerin bulunduğu kısım ve bu verileri temsil eden Huffman kod ağaçlarının saklandığı kısım olmak üzere iki kısımdan oluşur. Kullanılan Huffman ağaçları her bloğun başında sıkıştırılmış veriden önce yer alır, ve bu ağaçlar da Huffman kodlaması kullanılarak sıkıştırılır. LZSS algoritması 32. 768 byte uzunluğunda bir arama tamponu kullanır, ve bu sınırlar içerisinde kalmak koşuluyla bir önceki blokta yer alan bir katarı referans olarak kullanabilir. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 30
DEFLATE n n LZSS algoritmasında ileri tampon 258 ile sınırlandırılmıştır. Kodlama etkinliği açısından en az 3 karakter uzunluğunda tekrarlar göz önüne alınır. 3 ile 258 arasındaki 256 farklı karakter sayısı uzunluğu 1 byte ile temsil edilebilir. 32. 768 byte büyüklüğünde olan arama tamponu 15 bit ile temsil edilirken, 1 bit ise sıkıştırılmamış veriyi temsil eden bayrak için kullanılacağından [bayrak, mesafe, tekrar uzunluğu] gösterimi toplam 3 byte (1+15+8 = 24 bit) ile yapılır. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 31
DEFLATE n n Herhangi bir uygun tekrarlamanın bulunamadığı durumlarda kodlanan gerçek değerler karakter sayısı uzunluğu değeri ile aynı büyüklükte (0 -255 arasında) olduğu için ikisi aynı Huffman ağacı ile kodlanırken, mesafe bilgisinin boyu daha büyük olduğu için bu bilgi farklı bir Huffman ağacı ile kodlanır. Tekrar eden karakter katarları hash tabloları sayesinde hızlı bir şekilde bulunur. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 32
DEFLATE: Inflate n n Deflate ile sıkıştırılmış kodu açan algoritmaya Inflate adı verilmiştir. Inflate, Huffman ağaçlarının kodunu çözerken hız kazanmak için iki kademeli bir arama tablosu kullanır. İlk kademe tablosu kısa kodları kullanan semboller ile yaratılır. Sıkıştırılan veride çok fazla yer alan semboller kısa kodlar ile kodlandığı için, kodu çözerken çoğunlukla kısa koda sahip semboller ile karşılacak ve çoğunlukla bu tablo kullanılacaktır. n Eğer okunan veri için bu tabloda karşılık bulunamazsa ikinci kademe tablolarına bakılacaktır. Bölüm 3 - Sözlük Tabanlı Teknikler 33 6. 11. 2020 n
DEFLATE: Inflate n n n Eğer Huffman tablosunda en uzun kodu kullanan sembol 15 bit büyüklüğünde ise, 215 = 32. 768 elemanlı bir arama tablosu oluşturmak çok zaman alacaktır. Bunun yerine 8 bit ve daha kısa semboller için 256 elemanlı bir ilk kademe tablosu, ve daha uzun kodların ilk 8 bitleri haricinde geri kalan bitlerini saklamak üzere birkaç ikinci kademe tablosu yaratmak daha az zaman alacaktır. Arama tablosu yaratmanın amacı ise, her bit okununca Huffman tablosuna bakarak iki misli zaman kaybetmemektir. Arama tablosu kullanılınca, 8 -bit birden okunup, hemen karşılığı tablodan bulunabilir. 6. 11. 2020 Bölüm 3 - Sözlük Tabanlı Teknikler 34
- Slides: 34