Yazan : Şadi Evren ŞEKER
Oldukça basit ve hızlı olan bu sıkıştırma algoritmasına göre ardışık olarak gelen veriler arasındaki fark alınarak verilerin boyutu küçültülmüş olur.
Örneğin aşağıdaki sayıları ele alalım:
183 193 233 234 230
Bu sayıları sıkıştırmak için ilk sayıyı sonuç dizisine kopyalıyoruz ve diğer elemanlar ile farkı alıyoruz:
183 10 40 1 -4
Görüldüğü üzere sıkıştırma sonucunda elde edilen sayıların kapladığı yer daha azdır. Bu algoritmada sıkıştırma sonucu verinin kapladığı yerin azalması garanti edilmez. Bunun sebebi örneğin sayılar arasındaki farklar çok yüksekse farlkarı tuttuğumuz sonuç bilgisindeki sayıların orjinal sayılardan büyük olma ihtimalidir.
Algoritmanın açma aşamasında ilk sayıya eklenerek hesaplama yapılır:
183 -> 183
183 + 10 -> 193
193 + 40 -> 233
233 + 1 -> 234
234 + (-4) -> 230
şeklinde veri açılarak orjinal değerler bulunmuş olur.
Algoritmanın sıkıştırma (compress) kısmı aşağıdaki şekilde C dilinde kodlanabilir:
int a[]={183,193,233,234,230}; // sıkıştırılacak olan dizimiz
int b[5]; // sonucun bulunacağı dizi
b[0] = a[0]; //ilk eleman aynen kopyalanıyor
for(int i = 1;i<5;i++){ // dizinin bütün elemanlarını geçiyoruz
b[i] = a[i]-a[i-1];
}
yukarıdaki kodda sonuçta b dizisinde elde edilend eğer sıkıştırılmış değerdir. Algoritmanın açma kısmı için (decompress) aşağıdaki kod yazılabilir:
int a[]={183,10,40,1,-4}; // açılacak olan dizimiz
int b[5]; // sonucun bulunacağı dizi
b[0] = a[0]; //ilk eleman aynen kopyalanıyor
for(int i = 1;i<5;i++){ // dizinin bütün elemanlarını geçiyoruz
b[i] = b[i-1]+a[i];
}
Yukarıdaki kodların ikiside tek dizi kullanarak da çözülebilmektedir. Algoritma yapısı itibariyle kayıpsız sıkıştırma (lossless compression) bir örnektir çünkü orjinal verinin sıkışıtırılmış hali açıldığında orjinal veri kayıpsız olarak bulunabilmektedir.
110 views
