1、 哈夫曼编码译码哈夫曼编码译码 一、一、 需求分析需求分析 在当今信息爆炸时代, 如何采用有效的数据压缩技术节省数据文件的存储空间和 计算机网络的传送时间已越来越引起人们的重视, 哈夫曼编码正是一种应用广泛 且非常有效的数据压缩技术。哈夫曼编码是一种编码方式,以哈夫曼树即最优 二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。哈弗曼编码使用一 张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的 特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率 高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之 后的字符串的平均期望长度降低,从而
2、达到无损压缩数据的目的) 。哈夫曼编码 的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树 中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表 示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序 列作为和各个叶子对应的字符的编码,这就是赫夫曼编码。 哈弗曼译码输入字符 串可以把它编译成二进制代码,输入二进制代码时可以编译成字符串 二、二、其主要流程图其主要流程图: 开始 结点数是否大于 1 将 data 和权值赋给 ht 输出根结点和权值 调用 SELECT 函数 计算根结点函数 父结点为两子结点之和 输出两子结点和已构造的结点
3、是否为根结点? 左子是否为空? 此时编码为 0 I2*N? I+ 编码为 1 结束 否 否 否 右子是否为空 是 是 否 否 是 是 是 三、三、 设计要求设计要求 : (1)哈夫曼树的建立; (2)哈夫曼编码的生成 (3)编码文件的译码 四、四、总结:总结: 通过这次的课程设计了解课程设计是培养学生综合运用所学知识,发现,提出,分析和解 决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着 科学技术发展的日新日异, 当今计算机应用在生活中可以说得是无处不在。 因此作为二十一 世纪的大学来说掌握计算机开发技术是十分重要的。 回顾起此次课程设计,至今我仍感慨颇多,的
4、确,自从拿到题目到完成整个编程,从理论到 实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所 学过的知识, 而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我懂得了 理论与实际相结合是很重要的, 只有理论知识是远远不够的, 只有把所学的理论知识与实践 相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独 立思考的能力。 在设计的过程中遇到问题, 这毕竟独立做的, 难免会遇到过各种各样的问题, 同时在设计的过程中发现了自己的不足之处, 对以前所学过的知识理解得不够深刻, 掌握得 不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。 我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢! 五、五、源程序:源程序: #include #include /要用 system 函数要调用的头文件 #include /用 getch()要调用的头文件 #include #define N 50 /义用 N