28 Ocak 2016 Perşembe

Huffman Coding Tree(Kodlama Ağacı)

Öncelikle Frekans neymiş bunu öğrenelim:

Frekans veya titreşim sayısı bir olayın birim zaman (genel olarak 1 saniye) içinde hangi sıklıkla, kaç defa tekrarlandığının ölçümüdür, matematiksel ifadeyle periyodun çarpmaya göre tersidir.

Yani bir işin frekansı ne kadar yüksekse o iş birim zamanda o kadar fazla yapılıyor demektir.

Şimdi konumuz Huffman ağacı frekansla ne ilgimiz var diyebilirsiniz şöyle açıklıyım:


 Huffman ağacı oluşturulurken kullanılan kelimelerdeki harf sıklığına göre harflere frekans atanır.En yüksek frekansın en düşük puan almasına göre sıralanır.Sıralanan harfler kullanım puanına göre bir öncelik kuyruğunda tutulur.Şekildeki gibi işlemler yapılarak ağaç yapılandırılır.(Resimlere tıklayıp açabilirsiniz.)




 


 

Öncelik kuyruğunda sadece 1 eleman kaldığında her elemanın sağ ve sol çocukları çizilerek aşağıdaki Huffman Kodlama ağacına ulaşılabilir.
 

 Pseudo verilen öncelik kuyruğundan ağaç çıkarma :

function root huffman(oncelikKuyrugu)
{
     while(oncelikKuyrugu.elemanSayisi>1)//tek eleman kalıncaya kadar döner.
     {
          eleman1=oncelikKuyrugu.elemanAl(0)//değerdeki elemanın özelliklerini döner.
          eleman2=oncelikKuyrugu.elemanAl(1)//değerdeki elemanın özelliklerini döner.
          yeniEleman= new Node()  //boş eleman atanır       
          yeniEleman.leftChild=eleman1
          yeniEleman.rightChild=eleman2
          yeniEleman.letter=eleman1.letter+eleman2.letter
          yeniEleman.frekans=eleman1.frekans+eleman2.frekans
          oncelikKuyrugu.elemanSil()//baştaki elemanı siler.
          oncelikKuyrugu.elemanSil()//baştaki elemanı siler.
          oncelikKuyrugu.elemanEkle(yeniEleman)//frekansa göre öncelik kuyruğundaki yerine ekler.
    }//while 'ın sonu
    return oncelikKuyrugu.elemanAl(0)//kalan tek elemanı geriye döndürür.
}








İlk Yayın

İlk yayınım

Kişisel blog oluşturuldu.

Bloğumun hedefi yaptığım çalışmaları sizlerle paylaşmak.Buraya geldiğiniz için teşekkür ederim.