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.

Yorumlar

  1. Soner

    Bu uygulama komşu sayıların birbirine yakın olduğu durumlarda sıkıştırma için öncül bir işlem olarak kullanılabilir.
    Örneğin elimizde A = {2, 5, 8, 10, 12, 15} gibi bir dizi olsun.

    Bu hali ile LZM gibi bir sıkıştırma uygulandığında benzer bir sözcük dizimi olmadığı için sıkıştırma çok verimli olmayacaktır. Lakin Delta Sıkıştırması uygulanıp dizi B = {2, 3, 3, 2, 2, 3} hale getirilirse elemanların frekans değerleri arttırılıp sıkıştırma verimi arttırılabilir. Eğer sayılar arasında farklar benzer çıkmamış olsaydı bu durumda sözcüksel tabanlı sıkıştırma için değişen bir şey olmazdı. Çünkü burada önemli olan nokta frekansların artmasıdır. Frekans sabit ise yaklaşık olarak sıkıştırılan veri yine aynı oranda sıkışacaktır.

    Genel olarak görüntü sıkıştırma için elverişli bir yöntemdir çünkü görüntü içerisindeki komşu pikseller birbirine yakın sayılardır. Yeri gelmişken faydası olur diye eklemek istedim. Birilerinin işine yarayacaktır elbet.

Bir cevap yazın

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