在許多實際應用中,樹中結點常常被賦予乙個表示某種意義的數值,稱為該結點的權。從樹根結點到任意結點的路徑長度(經過的邊數)與該結點上權值的乘積,稱為該結點的帶權路徑長度。樹中所有結點的帶權路徑長度之和稱為全樹的帶權路徑長度,記為:
w pl
=∑i=
1nwi
liwpl=\sum_^n w_il_i
wpl=i=
1∑n
wil
iwi 是第i個結點所帶的權值,li 是該結點到根結點的路徑長度。
在含有n個帶權葉子的二叉樹中,其中帶權路徑長度(wpl)最小的二叉樹稱為哈夫曼樹,也稱最優二叉樹。
其中,c中的樹的wpl最小,可以驗證,它恰好為哈夫曼樹。
演算法描述如下:
將這n個結點分別作為n棵僅含有乙個結點的二叉樹,構成森林f。
構造乙個新結點,從f中選取兩顆樹節點權值最小的樹作為新結點的左、右子樹,並且將新節點的權值置為左、右子樹上根結點的權值之和。
從f中刪除剛選出的兩棵樹,同時將新得到的樹加入到f中。
重複步驟2和3,直至f中只剩下一棵樹為止。
從上述構造過程中可以看出哈夫曼樹具有如下特點:
每個初始結點最終都成為葉結點,且權值越小的節點到根結點的路徑長度越大。
構造過程中共新建了 n-1 個結點,因此哈夫曼樹中的結點總數為 2n - 1。
每次構造都選擇 2 棵樹作為新結點的孩子,因此哈夫曼樹中不存在度為 1 的結點。
對應待處理的乙個字串序列,若對每個字元用同樣長度的二進位制表示,則稱這種編碼方式為固定長度編碼。若允許對不同字元用不等長的二進位制位表示,則這種方式稱為可變長度編碼。 可變長編碼的特點是對高頻率的字元賦以端編碼,而對頻率較低的字元則以較長的一些的編碼,從而可以使字元平均編碼長度剪短,起到壓縮資料的效果。
若沒有乙個編碼是另乙個編碼的字首,則這樣的編碼為字首編碼。
如果喜歡的話,不妨關注一波,謝謝啦。
資料結構 哈夫曼樹 哈夫曼編碼
哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...
哈夫曼編碼 哈夫曼樹 (資料結構)
哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...
資料結構 哈夫曼樹
哈夫曼樹是二叉樹的一種。被稱為最優二叉樹。實際應用中最重要的是帶權路徑長度。樹的路徑長度 樹中每個結點的路徑長度之和。權 附加在樹節點上,表示出現的概率。樹的帶權路徑長度 所有葉子結點帶權長度之和。看例項 的結點路徑長度 從d到 a的路徑,共走了兩條邊,所以為2。樹中的葉子結點有 d,e和 f。結點...