目錄
一、帶權路徑長度
二、哈夫曼樹的定義
三、哈夫曼樹的構造
四、哈夫曼編碼
五、總結
結點的權:有某種現實含義的數值(如:表示結點的重要性等)
結點的帶權路徑長度:從樹的根到該結點的路徑長度(經過的邊數)與該結點上權值的乘積
樹的帶權路徑長度:樹中所有葉子結點的帶權路徑長度之和
在含有n個帶權葉結點的二叉樹中,其中帶權路徑長度(wpl)最小的二叉樹稱為哈夫曼樹,也稱最優二叉樹
給定n個權值分別為w1,w2,....wn的結點,構造哈夫曼樹的演算法描述如下:
1)將這n個結點分別作為n棵僅含乙個結點的二叉樹,構成森林f。
2)構造乙個新結點,從f中選取兩棵根結點權值最小的樹作為新結點的左、右子樹,並且將新結點的權值置位左、右子樹上根結點的權值之和。
3)從f中刪除剛才選出的兩棵樹,同時將新得到的樹加入f中。
4)重複步驟2)3),直至f中只剩下一棵樹為止。
注:
1)每個初始結點最終都稱為葉子結點,且權值越小的結點到根結點的路徑長度越大
2)哈夫曼樹的結點總數為2n - 1
3)哈夫曼樹中不存在度為1的結點
4)哈夫曼樹並不唯一,但wpl必然相同且為最優
固定長度編碼——每個字元用相等長度的二進位制表示
ascii編碼
a——01000001
b——01000010
c——01000011
d——01000100
每個字元用長度為2的二進位制表示
a——00
b——01
c——10
d——11
假設,100題中有80選c,10題選a,8題選b,2題選d
所有答案的二進位制長度 = 80*2 + 10*2 + 8*2 + 2*2 = 200bit
可變長度程式設計——允許對不同字元用不等長的二進位制位表示
若沒有乙個編碼是另乙個編碼的字首,則稱這樣的編碼為字首編碼
哈夫曼樹不唯一——哈夫曼編碼不唯一
資料結構 哈夫曼樹 哈夫曼編碼
哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...
哈夫曼編碼 哈夫曼樹 (資料結構)
哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...
資料結構 哈夫曼樹
哈夫曼樹是二叉樹的一種。被稱為最優二叉樹。實際應用中最重要的是帶權路徑長度。樹的路徑長度 樹中每個結點的路徑長度之和。權 附加在樹節點上,表示出現的概率。樹的帶權路徑長度 所有葉子結點帶權長度之和。看例項 的結點路徑長度 從d到 a的路徑,共走了兩條邊,所以為2。樹中的葉子結點有 d,e和 f。結點...