新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > 赫夫曼編譯碼系統的設計與實現

        赫夫曼編譯碼系統的設計與實現

        作者: 時間:2011-03-22 來源:網絡 收藏

        摘要:在信息快速傳輸和存儲過程中,數據壓縮有著重要的作用。從赫夫曼樹定義及算法出發,介紹了一個的設計與實現過程。這對于深入理解數據結構、程序設計有益。
        關鍵詞:赫夫曼樹;赫夫曼編碼;赫夫曼譯碼

        在數據結構課程的實踐環節中,通常會讓學生利用赫夫曼編碼進行文本壓縮與解壓縮。由于教材上只是給出了赫夫曼樹的定義及算法,學生會感到無從下手。本文將從赫夫曼樹定義及算法出發,通過實例介紹的具體設計與實現過程。

        1 設計內容
        1.1 功能模塊
        (1)赫夫曼建樹模塊:根據輸入的字符和頻率,完成赫夫曼樹的構造,并根據赫夫曼樹求赫夫曼編碼。
        (2)編碼模塊:讀取文本文件進行編碼,編碼結果存入到新文件。
        (3)譯碼模塊:讀取編碼文件并解碼,打開存儲編碼的文件,根據所讀取的編碼文件中的每個字符,利用赫夫曼樹進行解碼。
        (4)輸出模塊:將解碼后的每個字母寫入到一個新的文件中。
        1.2 測試數據
        用表1給出的字符集和頻度的實際統計數據建立赫夫曼樹,并實現以下報文的編碼和譯碼:“THISPROGRAM IS MY FAVORITE”。

        本文引用地址:http://www.104case.com/article/195043.htm

        a.jpg


        設計調試環境為Microsoft Visual C++6.0系統。

        2 設計原理及算法分析
        本次要做的赫夫曼編譯碼系統的主要功能是:運用二叉樹來設計二進制的前綴編碼。給一個文件,先統計文件中每個字符出現的頻數,即作為此字符的權值,然后將里面的字符編碼成相應的赫夫曼編碼。最后,根據赫夫曼譯碼原理把所給二進制數編譯成對應的字符串。
        2.1 構建赫夫曼樹
        一般而言,給定n個實數w1,w2,…,w3其中,n≥2,求一個具有n個結點的二叉數,使其帶權路徑長度最小。可以證明赫夫曼樹的帶權路徑長度是最小的。
        (1)根據與n個權值|w1,w2,…,w3|對應的n個結點構成具有n棵二叉樹的森林F={HT1,HT2,…,HTn},其中第i棵二叉樹HTi(1≤i≤n)都只有一個權值為wi的根結點,其左、右子樹均為空。
        (2)在森林F中選出兩棵根結點權值最小的樹作為一棵新樹的左、右子樹,且置新樹的根結點的權值為其左、右子樹上根結點權值之和。
        (3)從F中刪除構成新樹的那兩棵,同時把新樹加入F中。
        (4)重復第1和第3步,直到F中只含有一棵為止,此樹便為赫夫曼樹。
        2.2 赫夫曼編碼
        赫夫曼編碼是根據可變長最佳編碼定理,應用赫夫曼算法而產生的一種編碼,是消除編碼冗余度最常用的方法。它的平均碼字長度在具有相同輸入概率集合的前提下,比其它任何一種可譯碼都小,因此,也常被稱為緊湊碼。
        (1)給定字符集的赫夫曼樹生成后,求赫夫曼編碼的具體實現過程是:依次以葉子HT[i](0≤i≤n-1)為出發點,向上回溯至根為止。上溯時走左孩子則生成代碼0,走右孩子則生成代碼1。
        (2)統計從根到葉子的路徑上的標號依次相連,便為該葉子所對應字符的編碼。
        (3)用生成的各個字符的編碼替代原文件中的相應的字符,生成decode.txt文件。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 洪雅县| 申扎县| 兴和县| 光山县| 溧水县| 当阳市| 开原市| 公安县| 会宁县| 呼玛县| 定陶县| 临朐县| 新密市| 兰州市| 贡嘎县| 邛崃市| 巴东县| 修文县| 西林县| 即墨市| 明光市| 长子县| 达日县| 岳阳县| 五常市| 民丰县| 泰顺县| 尖扎县| 长岛县| 若羌县| 高唐县| 克拉玛依市| 张家港市| 加查县| 突泉县| 海门市| 沂源县| 南雄市| 广元市| 玉树县| 焉耆|