哈夫曼編碼測試

2022-08-09 10:03:12 字數 1798 閱讀 5757

設有字符集:s=。

給定乙個包含26個英文本母的檔案,統計每個字元出現的概率,根據計算的概率構造一顆哈夫曼樹。

並完成對英文檔案的編碼和解碼。

要求:(1)準備乙個包含26個英文本母的英文檔案(可以不包含標點符號等),統計各個字元的概率

(2)構造哈夫曼樹

(3)對英文檔案進行編碼,輸出乙個編碼後的檔案

(4)對編碼檔案進行解碼,輸出乙個解碼後的檔案

(5)撰寫部落格記錄實驗的設計和實現過程,並將源**傳到碼雲

(6)把實驗結果截圖上傳到雲班課

滿分:6分。

huffmannode設計

public class node 

public node(string data, int count)

public node(int count, node lchild, node rchild)

public node(

string data,

int count,

node lchild,

node rchild)

}

哈夫曼樹構造分為以下幾步:

統計出現的字元及頻率

將各個字元建立為葉子結點,頻率為結點的權值,用鍊錶儲存這些葉子結點

將結點佇列中的結點按權值公升序排列

取出權值最小的兩個結點構建父節點(要從鍊錶中刪除取出的結點),將新生成的父節點新增到結點鍊錶,並從新排序

重複4步驟,直到只剩下乙個結點

返回最後的結點,即為哈夫曼樹的根節點。

public void creathfmtree(string str)
編譯碼實現:

private string hfmcodestr = "";// 哈夫曼編碼連線成的字串

/*** 編碼

* @param str

* @return

*/public string tohufmcode(string str)

return hfmcodestr;

}/**

* * @param root 哈夫曼樹根節點

* @param c 需要生成編碼的字元

*/private void search(hnode root, string c)

}if (root.lchild != null)

if (root.rchild != null)

}// 儲存解碼的字串

string result="";

boolean target = false; // 解碼標記

/*** 解碼

* @param codestr

* @return

*/public string codetostring(string codestr)

end++;

}return result;

}/**

* 匹配字元哈夫曼編碼,找到對應的字元

* @param root 哈夫曼樹根節點

* @param code 需要解碼的二進位制字串

碼雲鏈結

哈夫曼編碼測試

1.定義 給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。2.術語 01 路徑和路徑長度 定義 在一棵樹中,從乙個結點往下可以達到的孩子或孫子結點...

哈夫曼編碼測試

在計算機資料處理中,霍夫曼編碼使用變長編碼表對源符號 如檔案中的乙個字母 進行編碼,其中變長編碼表是通過一種評估 符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字串的平均長度 期望值降低,從而達到無失真壓縮資料的目的。例如,在英文中,e的...

哈夫曼編碼測試

把字元從檔案中取出來,這是以前學過的io流實現的。統計出現的字元及頻率,將各個字元建立為葉子結點,頻率為結點的權值,用鍊錶儲存這些葉子結點。將所有帶權值的結點按權值從小到大排列 依次選取權值最小的結點放在樹的底部,權值小的在左邊 取出的結點相當於從這些結點的集合中剔除 生成乙個新節點作為這兩個結點的...