21 Kasım 2019 Perşembe

Run-Length Encoding



 Run-Length Encoding (RLE),  basit ve kayıpsız veri sıkıştırma algoritmalarından biridir. Bir veri setinde aynı veri dizilerinin sık kullanıldığı durumlar için uygundur. Karmaşık veri setlerinde iyi bir sıkıştırma oranı vermez.

Basit birkaç örnek üzerinde inceleyelim.

 Run-Length Encoding sıkıştırılacak dosyanın özelliklerine uyum sağlamak için birçok yolla ifade edilebilir.

Örnek 1                                                                                                                                                                

veri seti:  AAAAAAAAAAAAAAAAAAAASAAAAAAAAAAS   ( 32 byte )

veri setinde verilen harflerin önce tekrar sıklığını sonra da harfi yazalım.

sıkıştırılmış veri seti:  20A1S10A1S ( 10 byte )

 Veri setinin boyutu 32 byte'tan 10 byte'a düştü.



Örnek 2                                                                                                                                                                

veri seti: 11  13  13  13  13  13  13  13  13  14  14  14  14  15  ( 28 byte )

Bu kez verilen byte dizisi sayılardan oluştuğu için kaçış karakteri kullanarak bu veri setini sıkıştıralım. Eğer tekrar eden byte dizileri varsa başına tekrar ettiğini anlamak için kaçış karakteri koyalım, tekrar etmeyenleri de olduğu gibi yazalım. Kodlama şu şekilde olacak: kaçış karakteri(*), tekrar edilen veri, tekrar sıklığı.

sıkıştırılmış veri seti: 11  *  13  08  *  14  04  15  ( 14 byte )

Veri setinin boyutu 28 byte'tan 14 byte'a düştü.

Peki neden karmaşık veri setlerinde iyi sıkıştırma oranı alamayız?


Eğer birbirini tekrar eden semboller dizisi yoksa veya dizinin tekrar sıklığı üçten küçükse,  RLE verimli bir sonuç vermez. Bu durumu örneklerle inceleyelim.


Örnek 3                                                                                                                                                                


veri seti:  QWERTYY ( 7 byte )

sıkıştırılmış veri seti:  1Q1W1E1R1T2Y  (  14 byte )



 Veri setinin boyutu 7 byte'tan 14 byte'a yükseldi.





Örnek 4                                                                                                                                                               

veri seti:  11  12  12  13  14  14  15   ( 7 byte ) 

sıkıştırılmış veri seti:  11  *  12  02  13  *  14  02  15  ( 16 byte )


 Bu da veri setinin boyutunu kısaltmaktan çok uzatan bir örnek oldu. Veri setinin boyutu 7 byte'tan 16 byte'a yükseldi.
 Örnek 3 ve Örnek 4'te gördüğümüz gibi bu basit algoritma bazı durumlarda fazla verimsiz olduğu gibi doğru yerde kullanıldığında çok büyük oranlarda dosya sıkıştırmaya yardımcı olabilir. 

 Örnek 1 gibi, birbirini tekrar eden binlerce karakterden oluşan bir text dosyası olduğunu düşünürsek, sıkıştırma oranın ne kadar yüksek olabileceğini hayal edebiliriz.