Ö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.
}