這裡給出的源**huffman.zip用8種不同的方式實現了huffman編碼演算法。這些**意在演示不同huffman演算法的實現原理,比較演算法執行效率的差別,但並沒有針對實際應用環境的需求,做更多的空間或效率優化。所有**以c++語言編寫,為了更容易地實現各種資料結構,**中大量應用了標準c++庫和模板技術。——總之,這些**的作用在於示例和演示;如果大家想把這些**應用在實際應用中,可能還需要做進一步的調整和優化。
我在2023年9月的《程式設計師》雜誌上發表了「奇妙的二叉樹」一文,對這8種演算法進行了詳細的講解。這裡,我只給出8種演算法的概要描述。
這8種實現方式分別是:
上述8種演算法分別對應於8個同名c++類,這些類都是由huffman_base類派生的。huffman_base類提供了與huffman演算法相關的大多數通用功能,如編碼轉換、canonical huffman編碼生成、huffman編碼驗證等等。
main.cpp中的tester類提供了用隨機資料測試上述8種演算法,並顯示演算法的執行時間及執行結果的功能。
windows: 使用visual studio .net(建議使用vs .net 2003或以上版本)開啟huffman.sln,編譯生成並執行huffman.exe即可。
linux: 系統中應已安裝gnu gcc(建議安裝gcc 3.2.2或以上版本)。本目錄下的makefile是linux下的工程檔案,直接在本目錄下執行make命令即可生成可執行程式huffman。
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...