正規化Huffman編碼的實現

2021-05-25 07:47:45 字數 886 閱讀 6438

傳統的

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...