标签:mamicode 结构 思考 程序 结果 应该 很多 https detail
课程:《程序设计与数据结构》
班级: 1823
姓名: 邹家伟
学号:20182315
实验教师:王志强
实验日期:2019年11月15日
必修/选修: 必修
(1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
(2)构造哈夫曼树
(3)对英文文件进行编码,输出一个编码后的文件
(4)对编码文件进行解码,输出一个解码后的文件
该实验可以粗略分为以下几个步骤:
(3)根据频数构造哈夫曼二叉树:这部分难度最大,困惑我时间最长。
起初我想用数组来构建二叉树,可是我发现无法区分存取取出节点,从而无法确定哪个结点为字母的频数。
后来我思考到用两个不一样的数组存放字母频数与取出的频数,再将其放入到第三个数组进行排序,但这样进行太过复杂,尤其在后期编码解码过程中,程序尤为复杂,得不偿失。
最后,通过网络搜索,我发现可以哈夫曼树的创建也可使用创建树的基本方法创建,即写出一个节点类,在节点类里存放字符信息,如果为两个字符频数之和,即字符信息为空。
(4)编码和解码:此步骤与之前遍历类似,都为先左后右,定义一个编码字符串,如果向左移,编码字符串 +“1”,如向右,编码字符串 +“0”;
完成哈夫曼树的构造,让我明白一个道理,凡是树的构造,都应首先考虑使用结点,因为结点里可以存放树的很多信息,这意味着树可以有很多种用法。实现树的方法可以能有很多种,但我们还是最应该考虑哪种方法对最后的遍历最有效。
-? 文件读取的相关知识
-? 哈夫曼树的构建
标签:mamicode 结构 思考 程序 结果 应该 很多 https detail
原文地址:https://www.cnblogs.com/zjwbk/p/11909699.html