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.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


4 × = otuz altı