Sıkıştırma algoritmaları
Bildiğimiz gibi bilgisayarda veriler 1 byte yani 8 bitten oluşur yani karakterler 010101111 şeklinde 2 lik sistemde sayılarla temsil edilir. Bilgisayarlarda ihtiyaç duyulan veya saklanan verilerin her geçen gün arttıgı biliniyor bu yogunluğu azaltmak üzere ve daha az kayıplı sıkıştırma yapabilmek için birçok sıkıştırma programları üretilmiştir hepimiz bunları kullanıyoruz kullanmak zorundayız. Winar winzip en popüler olanları bu programlar profesyonel olmalarına ragmen sıkıstırdığımız dosyaları açarken bazı hatalarla karşılaşmışsınızdır.
Sıralama algoritmalrı kayıplı ve kayıpsız olmak üzere iki türlüdür. Kayıplı algoritmanın tek farkı sıkıstırma işleminden sonra tekrar eski veriye ulaşamamızdır aklınıza ozaman niçin böyle bişeye gerek var gibi bir soru gelebilir bunun için en güzel örnek video dosyalarıdır örneğin *.mgp uzantılı dosyalar veya resimler bu dosyalar belli şeklide sıkıştırılarak bu formatlara çevirilir kullandınız sıkıştırma katsayı ise sizin video ve resim kalitenizi belirtir kayıplı algoritmada sıkıştırma isleminde sonra veri ne kadar küçülürse bizim için kötüdür videoların boyutu küçükse kalitesizdir diye düşünürüz. Kayıpsız da ise tam tersi söz konusudur. Neyse konuyu fazla uzatmayalım
kodlamaya geçelim
Öncelikle C:\\ dizinine ismi serdar olan bir metin dosyası atın , uygulamamızda dosyalama işlemleri ve arraylist kullanacağımız için system.IO ve system.collections kütüphanelerini ekleyelim
private void button1_Click(object sender, EventArgs e)
{
byte[] dizidoya;
string dosyayolu;
StreamReader dosya = File.OpenText(“c:\\serdar.txt”);
string deger = dosya.ReadToEnd();
dizidoya = System.Text.Encoding.UTF8.GetBytes(deger);
MessageBox.Show(deger.ToString());
sikistir(dizidoya);//* fonksiyonumuzu çağırıyoruz
}
//*fonksiyonumuzu tanımlıyoruz
private void sikistir(byte[] dosyaoku)
{
char[] dizi = System.Text.Encoding.UTF8.GetChars(dosyaoku);
ArrayList siralidizi = new ArrayList();
ArrayList tekeleman = new ArrayList();
ArrayList kactane = new ArrayList();
ArrayList bulunannumara = new ArrayList();
ArrayList bitsayisi = new ArrayList();
ArrayList tambitsayisi = new ArrayList();
int adet = 0, j = 0, i = 0;
siralidizi.AddRange(dizi);
siralidizi.Sort();
while (i<=siralidizi.Count-2)
{
tekeleman.Add(siralidizi[i]);
adet = 0;
j = i + 1;
while ((char)siralidizi[i]==(char)siralidizi[j])
{
adet++;
j++;
}
if (adet == 0)
{
i++;
}
else
{
i = i + adet + 1;
}
kactane.Add(adet + 1);
}
tekeleman.Add(siralidizi[siralidizi.Count - 1]);
kactane.Add(“1″);
ArrayList siralitekeleman = new ArrayList();
siralitekeleman.AddRange(kactane);
int degertut;
Object degertut2;
for (int n = 0; n <= siralitekeleman.Count-1; n++)
{
for (int t = 0; t <= siralitekeleman.Count-1; t++)
{
if (Convert.ToInt32(siralitekeleman[n]) > Convert.ToInt32(siralitekeleman[t]))
{
degertut = Convert.ToInt32(siralitekeleman[n]);
siralitekeleman[n] = siralitekeleman[t];
siralitekeleman[t] = degertut;
degertut2 = tekeleman[n];
tekeleman[n] = tekeleman[t];
tekeleman[t] = degertut2;
}
}
}
for (int m = 0; m <=tekeleman.Count-1; m++)
{
bitsayisi.Add(“0″);
for (int z = 0; z < m; z++)
{
bitsayisi[m] = “1″ + bitsayisi[m];
}
}
for (int m = 0; m <=dizi.Length-1; m++)
{
Object eleman;
eleman = dizi[m];
int numara = tekeleman.IndexOf((Char)eleman);
tambitsayisi.Add(bitsayisi[numara]);
}
string bitler=”";
for (int m = 0; m <=dizi.Length-1; m++)
{
bitler += (string)tambitsayisi[m];
}
int adedi = bitler.Length;
int bitsay = adedi % 8;
if (bitsay!=0)
{
for (int c = 0; c <=7-bitsay; c++)
{
bitler += “1″;
}
this.Text = bitler;
char[] cozdizi = new char[(int)bitler.Length / 8];
for (int m = 0; m < cozdizi.Length-1; m++)
{
string ydeger;
ydeger = bitler.Substring(m * 8, 8);
int deg = 0;
for (int s = 0; s >= 0; s–)
{
int a;
a = Convert.ToInt32(ydeger[s].ToString())*(int)Math.Pow(2,7-s);
deg += a;
}
byte sayi = (byte)deg;
cozdizi[m] = (char)sayi;
}
byte[] dosyayaz = System.Text.Encoding.UTF8.GetBytes(cozdizi);
FileStream dosya = new FileStream(“yeniserdar.txt”, FileMode.OpenOrCreate);
dosya.Write(dosyayaz, 0, (int)cozdizi.Length);
}
programı çalıştırdıkdan sonra yeni oluşturulan dosyayı açtıgımızda

