哈夫曼樹解壓與壓縮

哈夫曼樹解壓與壓縮

ID:30275996

大?。?34.00 KB

頁數(shù):14頁

時間:2018-12-28

哈夫曼樹解壓與壓縮_第1頁
哈夫曼樹解壓與壓縮_第2頁
哈夫曼樹解壓與壓縮_第3頁
哈夫曼樹解壓與壓縮_第4頁
哈夫曼樹解壓與壓縮_第5頁
資源描述:

《哈夫曼樹解壓與壓縮》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫

1、實用標準文案哈夫曼樹的壓縮與解壓1.算法簡要描述1.哈夫曼算法1.哈弗曼算法是根據給定的n個權值{w1,w2,w3.......wn},構造由n棵二叉樹構成的深林F={T1,T2,。。。。Tn},其中每個二叉樹Ti分別都是只含有一個權值wi的根結點,其左右子樹為空(i=1,,,,,,2)。2.在深林F中選取其根結點的權值最小的兩棵二叉樹,分別作其左右子樹構造一顆新的二叉樹,并置這棵新的二叉樹根結點的權值為其左右子樹的根結點之和。3.從F中刪去這兩棵二叉樹,同時剛新生成的二叉樹加入到深林F中。4.重復2,3,步驟,直至深林F中只含有一顆二叉樹為止

2、。2.哈夫曼樹的實現(xiàn)函數(shù)StringEnCode(CharTypech):表示哈夫曼樹已存在,返回字符ch的編碼。函數(shù)LinkListUnCode(StringstrCode):表示對哈夫曼樹進行譯碼,返回編碼前的字符序列。根據算法可以看出,在具有n個結點權值的哈夫曼樹的構造過程中,每次都是從F中刪去兩棵樹,增加一棵樹,即每次結束后減少一棵樹,經過n-1次處理后,F(xiàn)中就只剩下一棵樹了。另外,每次合并都要產生一個新的結點,合并n-1次后共產生了n-1個新結點,并且這n-1個新節(jié)點都是具有左右子樹的分支結點。則最終得到的哈夫曼樹

3、中共有2n-1個結點,并且其中沒有度為1的分支結點,最后一次產生的新結點就是哈夫曼樹的根結點。源代碼中創(chuàng)建了一個哈夫曼樹結點類,其中有數(shù)據成員weight,parent,leftChild,rightChild分別代表了權值,雙親,左孩子,右孩子。在哈夫曼樹類中有數(shù)據成員*nodes,*LeafChars,*LeafCharCodes,curPos,num,分別用來存儲結點信息,葉結點字符信息,葉結點字符編碼信息,譯碼時從根結點到葉結點路徑的當前結點,葉結點個數(shù)。哈夫曼樹類中含有多個函數(shù),有構造函數(shù),析構函數(shù)等。由函數(shù)HuffmanTree(C

4、harTypech[],WeightTypew[],intn)來構造由字符,權值,和字符個數(shù)構造哈夫曼樹,在根據哈夫曼算法很容易實現(xiàn)哈夫曼類的函數(shù)以及構造函數(shù)。在在算法中,求葉結點字符的編碼時,需要從葉結點出發(fā)走一條從高葉結點到根結點的路徑,而編碼卻是從根結點出發(fā)到葉結點的路徑,由左分支為編碼0,右分支為編碼1,得到的編碼,因此從葉結點出發(fā)到根結點的路徑得到的編碼是實際編碼的逆序,并且編碼長度不確定,又由于可以再線性鏈表中構造串,因此將編碼的信息儲存在一個線性立案標準,每得到一位編碼都將其插入在線性鏈表的最前面。在求某個字符的編碼是由函數(shù)EnC

5、ode(CharTypech)來求,返回字符編碼。在進行譯碼時,用一個線性鏈表存儲字符序列,由函數(shù)Decode(StringstrCode)來求,對編碼串strCode進行譯碼,返回編碼前的字符序列。函數(shù)Compress()用哈夫曼編碼壓縮文件。函數(shù)Decompress()解壓縮用哈夫曼編碼壓縮的文件。精彩文檔實用標準文案在主函數(shù)中有兩個選項,一個是選擇編碼壓縮,一個是解壓。在函數(shù)中使用了文件輸入輸出流,我們可以選擇要壓縮的文件名輸入,在選出壓縮文件保存的地方和文件類型,將壓縮所得到的文件存儲在另一個文件中,解壓也是如此。1.源代碼#ifnde

6、f__HUFFMAN_TREE_NODE_H__#define__HUFFMAN_TREE_NODE_H__//哈夫曼樹結點類模板templatestructHuffmanTreeNode{WeightTypeweight;//權數(shù)據域unsignedintparent,leftChild,rightChild;//雙親,左右孩子域HuffmanTreeNode();//無參數(shù)的構造函數(shù)模板HuffmanTreeNode(WeightTypew,intp=0,intlChild=0,intrChild=0);/

7、/已知權,雙親及左右孩子構造結構};//哈夫曼樹結點類模板的實現(xiàn)部分templateHuffmanTreeNode::HuffmanTreeNode()//操作結果:構造空結點{parent=leftChild=rightChild=0;}templateHuffmanTreeNode::HuffmanTreeNode(WeightTypew,intp,intlChild,intrChild)//操作結果:構造一個權為w,雙親為p

8、,左孩子為lChild,右孩子為rChild的結點{weight=w;//權parent=p;//雙親leftChild=lChild;//左孩子ri

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現(xiàn)內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。