傳統的
huffman
編碼依賴於二叉樹,一方面
huffman
編碼生成的速度不夠快,另一方面在沒有指標的程式語言中要實現二叉樹結構又非常複雜。所以懂得構造正規化huffman編碼去解決一些問題在某些方面就很有必要。正規化huffman編碼相比與傳統huffman編碼,不需要建造huffman樹,只需求出每個符號在huffman樹中從樹根到到該符號節點的路徑長度即可,此路徑長度即為該符號的編碼長度。在求出各符號的編碼長度之後,按如下規則進行編碼:
1)求出編碼長度相同的符號的數目,如
length num
5 2
4 3
3 2
2 2
1 0
2)生成編碼,char1,char2,char3,char4,char5,char6,char7,char8,char9
的深度為5
,5,4,4,4,3,3,2,2
所以char1
的編碼為00000
,長度為5;
char2
的編碼為
char1
的編碼加
1,再右移(
char1
長度減char2
長度)位
,即00001
;同理char3,char4,char5
的編碼為0001,0010,0011
;到char6
時為0100
右移4(char4
的長度)
減去3(char5
的長度),
即010
;char7
則為011;char8,char9的編碼為10,11
以上為演算法,下面給出**:
Huffman編碼的實現
這裡的huffman編碼就是離散數學中學的最優二叉樹,現在我們用c 來實現它。首先考慮實現它使用的資料結構,當然這裡肯定使用二叉樹。其次就是儲存方式,對於樹一般情況是用間接儲存也就是鍊錶。但是二叉鍊錶不方便尋找雙親節點,這裡使用向量更好,對儲存空間的利用率也較高。建立資料結構 huffman樹中每個...
Huffman編碼的實現
include include define maxbit 100 定義哈夫曼編碼的最大長度 define maxvalue 100000 定義最大權值 define maxleaf 300 定義哈夫曼樹中最多葉子節點個數 define maxnode maxleaf 2 1 哈夫曼樹最多結點數 u...
Huffman編碼C 實現
huffman.h 葉子結點為n的哈夫曼樹共有2n 1個結點 ifndef huffman h define huffman h class huffmannode huffmannode const char data,const double wt,const int pa 1,const in...