1. 程式人生 > >正規化Huffman編碼的實現

正規化Huffman編碼的實現

傳統的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的長度),即010char7則為011;char8,char9的編碼為10,11

以上為演算法,下面給出程式碼: