演算法 演算法之字元統計哈夫曼編碼(C 原始碼)

2021-10-18 12:13:45 字數 1482 閱讀 2360

有乙個英文句子str=「the following code computes the intersection of two arrays.」,請統計各個字元出現的次數,以其為頻率構造對應的哈夫曼編碼,將該英文句子進行編碼以得到enstr。編寫程式實現上述功能。

1、定義哈夫曼陣列的結構體htreenode用ht[ ]表示,裡面包含:字元data,權值weight,父親結點p,左孩子lc,右孩子lr。

2、定義點的結構體nodetype,包含:字元data,權值weight,編號no,過載小於號字元,使權值小的先出隊。

3、creat函式,初始化各個結點與優先佇列裡面的元素,設定所有結點的指標域,將n個結點進qu,構造哈夫曼樹n-1個非葉子結點,出隊權值最小的結點e1,出隊權值次小的結點e2,構造哈夫曼樹的非葉子結點j,修改e1.no的雙親為結點j,修改e2.no的雙親為結點j,構造佇列結點e。

4、構造hafu函式,即編碼,先構造葉子結點i的哈夫曼編碼,while迴圈到根結點,如果當前結點cur為雙親f的左孩子,code加0,如果為右孩子,code加1,最後將哈夫曼編碼得到儲存在htcode陣列裡面。

5、在main函式裡面初始化str陣列為要求的句子,統計句子中的字元出現次數,儲存在ht[ ]陣列裡面,呼叫creathafu函式。

6、輸出結果。

演算法 哈夫曼編碼

計算機中使用二進位制編碼字元 哈夫曼編碼是通過構造哈夫曼樹得到的,哈夫曼樹是通過貪心演算法得到的 貪心演算法構造哈夫曼樹 將字元出現的次數作為哈夫曼樹的權值,按照貪心演算法,選擇權值最小的兩個結點,成為乙個數的左右結點 左右子結點的權值變為子樹根的權值 然後在餘下的結點中遞迴選用最小的兩個結點 根據...

演算法導論之哈夫曼編碼

今天和大家一起討論haffman編碼,哈夫曼編碼是基於哈夫曼樹,也可以被稱為最有二叉樹,哈夫曼編碼可以有效的壓縮資料,通常可以節省20 90 具體的壓縮率依賴於資料的特性。首先給大家介紹一下什麼是最優二叉樹 在介紹什麼是最有二叉樹之前,先說明兩個概念 i 葉子節點的路徑長度 從根到葉子節點的邊的個數...

哈夫曼樹的構造演算法,哈夫曼編碼演算法

include define max 100 define maxvalue 500 typedef struct int weight int parent,lchild,rchild node 哈夫曼樹結點型別 以下部分定義哈夫曼編碼儲存結構 typedef structcodetype typ...