哈夫曼樹又稱最優樹(二叉樹),是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼(huffman)2023年提出,這種樹在資訊檢索中很有用。
結點之間的路徑長度:從乙個結點到另乙個結點之間的分支數目。
樹的路徑長度:從樹的根到樹中每乙個結點的路徑長度之和。
結點的帶權路徑長度:從該結點到樹根之間的路徑長度與結點上權的乘積。
樹的帶權路徑長度:樹中所有葉子結點的帶權路徑長度之和,記作:
wpl為最小的二叉樹就稱作最優二叉樹或哈夫曼樹。
完全二叉樹不一定是最優二叉樹。
哈夫曼樹的構造:
(1)根據給定的n個權值構造n棵二叉樹的集合f=,其中ti中只有乙個權值為wi的根結點,左右子樹為空;
(2)在f中選取兩棵根結點的權值為最小的數作為左、右子樹以構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為左、右子樹上根結點的權值之和。
(3)將新的二叉樹加入到f中,刪除原兩棵根結點權值最小的樹;
(4)重複(2)和(3)直到f中只含一棵樹為止,這棵樹就是哈夫曼樹。
例1:例2:
結點的儲存結構:
構造哈夫曼樹的演算法說明:
#define n /* 葉子總數 */
#define m 2*n-1 /* 結點總數 */
證:由性質3,葉子結點數 n0=n2+1,故哈夫曼樹結點總數為 n0+n2=n0+(n0-1)=2*n0-1
例3 在解某些判定問題時,利用哈夫曼樹獲得最佳判定演算法。
(a)wpl=0.05*1+0.15*2+0.4*3+0.3*4+0.1*4=3.15
(b)(c)
wpl=0.4*1+0.3*2+0.15*3+0.05*4+0.1*4=2.05 wpl=0.05*3+0.15*3+0.4*2+0.3*2+0.1*2=2.2
哈夫曼編碼
從哈夫曼樹根結點開始,對左子樹分配**「0」,右子樹分配**「1」,一直到達葉子結點為止,然後將從樹根沿每條路徑到達葉子結點的**排列起來,便得到了哈夫曼編碼。
例,對電文 emcad 編碼。若等長編碼,則
emcad => 000001010011100 共15位
設各字母的使用頻度為 =。用頻度為權值生成哈夫曼樹,並在葉子上標註對應的字母,樹枝分配**「0」或「1」:
各字母的編碼即為哈夫曼編碼: emcad => 000001011011 共12位
哈夫曼編碼 哈夫曼樹 (資料結構)
哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...