30 Nisan 2010 Cuma

Run Length Encoding (RLE) - Bölüm-1

Run Length Encoding ya da burada kullanacağımız kısa adıyla RLE, oldukça sık başvurulan, en basit veri sıkıştırma yöntemlerinden birisidir.

Kayıpsız veri sıkıştırma tekniğine dayanan bu yöntemde, birbirini tekrarlayan uzun sembol dizileri, bu sembolün bir örneği ve sembolün kaç kez tekrarlandığı yan yana yazılarak sıkıştırma yapılması amaçlanmıştır. Şöyle ki; bir sembol dizisi, 'L' tane 'S' sembolünün tekrarlanmasından oluşuyor ise, bu diziyi kısaca 'LS' şeklinde yazmak yeterli olacaktır... (Devam)

Örnek vermek gerekirse;
AAAAAAAABBBBBCCC
karakter dizisini şöyle gösterebiliriz:
8A5B3C
Bu şekilde bir gösterimle, toplam 16 karakterden oluşan bir diziyi, hiçbir kayıp yaşamadan 6 karakterden oluşan bir alana sıkıştırabiliyoruz. Bu karakterlerin yüzlerce kez tekrar ettiği bir diziyi ele aldığımızda, sıkıştırma oranının ne kadar yüksek olacağını öngörebilirsiniz.

Artık biraz Yazılım Yazalım! Buraya kadar anlattıklarımızı yerine getiren basit bir C# fonksiyonu yazmak gerekirse;

        public string RLEencode(string input)
        {
            char tmp1, tmp2;
            string output;
            int i, count;

            output = "";
            tmp1 = input[0];
            tmp2 = tmp1;
            count = 1;

            for (i = 1; i < input.Length; i++)
            {
                tmp1 = input[i];
                if (tmp1 != tmp2)
                {
                    output += count.ToString() + tmp2;
                    tmp2 = tmp1;
                    count = 1;
                }
                else
                {
                    count++;
                }
            }

            output += count.ToString() + tmp2;
            return (output);
        }

fonksiyonu yeterli olacaktır. Tabi ki bu kodlama fonksiyonunun oluşturduğu kodlanmış karakter dizisini orjinal haline geri döndüren bir de kod çözücü fonksiyonu olacaktır. Ben burada kod çözücü fonksiyonu yazmayacağım, bu kadar da hazırcı olmayalım değil mi?

Diğer taraftan, RLE tekniğinin her zaman bu kadar etkili olmayabileceğini de tahmin etmek zor değil. Karakterlerin tekrar etmediği bir diziyi ele alırsak;
ABCDE
şeklindeki 5 karakterden oluşan dizi,
1A1B1C1D1E
 şeklinde 10 karakterden oluşan bir dizi ile gösterilmelidir. Yani dizinin boyutunu %100 oranında artıran bir sıkıştırma uygulamış oluyoruz. Bu ve buna benzer durumlarla karşılaşan kişiler, temeli yukarıda anlattığımız gibi olan RLE tekniğine yeni özellikler katmışlar, yeni öneriler sunmuşlardır. İşte bu yüzden, temeli aynı olan farklı yöntemler geliştirilmiştir.

Gelecek yazımda, bu farklı RLE tekniklerine değinmeyi, getiri ve götürülerini derince incelemeyi planlıyorum.

3 yorum:

  1. Yeterince sade ve anlasilir. Cok kisiye faydasi olacak. Tesekkürler

    YanıtlaSil
  2. 13 yıl sonra oldu. Teşekkürler

    YanıtlaSil