学号20182325袁源 《数据结构与面向对象程序设计》哈夫曼编码实践
学号20182325袁源 《数据结构与面向对象程序设计》哈夫曼编码实践
(1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
- 事先准备英文文件
- 用读写流将文件读出
- 建立数组储存字母出现个数。出现就自增。用个数代替概率。
(2)构造哈夫曼树
-
建立 List
nodes = new ArrayList (); -
用26个字母和字符个数作为数据储存。
-
根据字符个数排序,将最小的两个从数组中取出,并合成一个新节点加入数组。
-
将数组最后一个节点作为根节点。
(3)对英文文件进行编码,输出一个编码后的文件
-
遍历哈弗曼树,进入左子树编码加“0”,进入右子树编码加“1”
-
叶节点成功编码。
-
通过流逐个字母判定,将编码后的“01”们建立一个新文件。
(4)对编码文件进行解码,输出一个解码后的文件
- 用队列的方式,每添加一个元素就判定一次,是否有对应序列。如果有输出字符。
- 建立一个新文件。