霍夫曼樹(最優二叉樹)簡介
一、霍夫曼編碼
說到霍夫曼樹,就不得不提霍夫曼編碼(Huffman Coding)。霍夫曼編碼是可變字長編碼(VLC)的一種。David.A.Huffman於1952年提出該編碼方法,即完全依據字元出現概率來構造異字頭的平均長度最短的碼字,亦稱之為最佳編碼。
在資料通訊中,需要將傳送的文字轉換成二進位制的字串,用0,1碼的不同排列來表示字元。例如,需傳送的報文為“AFTER DATA EAR ARE ART AREA”,這裡用到的字符集為“A,E,R,T,F,D”,各字母出現的次數為{8,4,5,3,1,1}。現要求為這些字母設計編碼。要區別6個字母,最簡單的二進位制編碼方式是等長編碼
在實際應用中,各個字元的出現頻度或使用次數是不相同的,如A、B、C的使用頻率遠遠高於X、Y、Z,自然會想到設計編碼時,如果能讓出現頻率高的字元的編碼長度減少,頻率低的字元編碼長度 長於 頻率高的。這樣整個資訊的編碼長度會減少,並且能區分出不同的字元。
為了實現這種更高效的編碼方式,就需要利用一個二叉樹的結構來進行輔助編碼,這種二叉樹即為霍夫曼樹
二、霍夫曼樹的定義與演算法描述
在說明霍夫曼樹之前,需要介紹幾個術語。
2、結點的權及帶權路徑長度 若將樹中結點賦給一個有著某種含義的數值,則這個數值稱為該結點的權。結點的帶權路徑長度為:從根結點到該結點之間的路徑長度與該結點的權的乘積。 3、樹的帶權路徑長度 樹的帶權路徑長度規定為所有葉子結點
所謂赫夫曼樹,就是帶權路徑長度之和WPL最小的那個二叉樹。(因此也叫作最優二叉樹)
一般來說,用n(n>0)個帶權值的葉子來構造二叉樹,限定二叉樹中除了這n個葉子外只能出現度為2的結點。演算法描述
例如
三、霍夫曼編碼的實現