赫夫曼樹:
1、先把有權值的葉子節點按照從小到大的順序排成乙個有序序列,即:a(5),e(10),b(15),d(30),c(40)。
2、取前兩個權值最小的結點即a(5)和e(10),作為乙個新的結點n1的兩個子節點,結點權值較小的作為左結點,即a為左結點,e為右結點,n1的權值為兩個結點權值的和,即5+10=15。
3、將n1替換a和e,放到原序列裡,重新排序,即:n1(15),b(15),d(30),c(40)。重複步驟2,取出n1(15),b(15),組成新的結點n2,n2權值為30。
4、將n2替換n1和b插入到序列裡,即n2(30),d(30),c(40),重複步驟2,取出n2(30),d(30),組成新的結點n3,n3權值為60。
5、剩下n3(60)和c(40),將他倆組成新的結點t,c為左結點,n3為右結點。生成赫夫曼樹如下圖所示:
赫夫曼編碼:
假設6個字母頻率為a 27,b 8,c 15,d 15,e 30,f 5,合起來正好是100%,將他們排成赫夫曼樹如下所示:
將權值左分支改為0,右分支改為1,如下圖所示:
此時,我們對六個字母用其從跟到葉子結點所經過的路徑的0和1來編碼,可以得到如下:
a:01
b:1001
c:101
d:00
e:11
f:1000
雙方約定好赫夫曼樹後,也可以根據赫夫曼編碼來解碼,等到原始碼。
赫夫曼樹和赫夫曼編碼
include define maxsize 128 字元表 typedef struct table 哈夫曼樹節點 typedef struct hfmtree 哈夫曼編碼 typedef struct hfmcode hfmtree hdata 2 maxsize 1 hfmcode code ...
赫夫曼樹和赫夫曼編碼
以下內容主要參考了嚴蔚敏版的資料結構教材。赫夫曼樹又叫做最優樹,是一類帶權路徑長度最短的樹,這裡討論的是最優二叉樹。假設現在有n個權值w1,w2,w nw 1,w 2,w n w1 w2 wn 如何構造一顆有n個葉子節點的二叉樹使得二叉樹的帶權路徑長度 k 1nwk lk sum n w k l k...
赫夫曼樹與赫夫曼編碼
問題描述 利用huffman編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接受端將傳來的資料編碼進行解碼 復原 對於有些通道,每端都需要乙個完整的編 解碼系統。試為這樣的資訊收發站編寫乙個huffman的編 解碼系統。給...