哈夫曼编码设计报告(2)

2019-06-02 15:05

武汉工程大学计算机科学与工程学院 综合设计报告

第二章 设计简介及设计方案论述

2.1 设计简介

利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本,试设计一个哈夫曼编码/译码系统。通过本课程设计,应使学生掌握哈夫曼编码的特点、存储方法和基本原理,培养学生利用C++语言正确编写程序及调试程序的能力,运用数据结构知识解决实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。

内容:分两个层次

层次一:用表中给出的字符和频度数据编程建立哈夫曼树,并实现对以下报文进行编码/译码。THIS PROGRAM IS MY FAVORITE

层次二:编程从文件任意输入一段报文,首先统计字符的频度,然后建立哈夫曼树,并给出报文的编码/译码。

2.2 问题分析

功能:对已知的字符频度建立哈夫曼树,可实现输入一段报文,并进行编码/译码。 对任意从文件中输入一段报文,计算每个字符频度,建立哈夫曼树,给出报文的编码/译码可存储在另一个txt文件中。

内部结构:首先应声明一个结构类型结点,结点存储包含:字符,频度,编码,双亲,左孩子,右孩子。利用已知的字符频度建立哈夫曼树。或是输入一段字符串后,把每个字符作为叶节点建立哈夫曼树。

输出形式:能体现出哈夫曼树以建立;每个字符的频度值;翻译出输入报文编码;根据已给出的频度进行译码。

- 2 -

武汉工程大学计算机科学与工程学院 综合设计报告

2.3设计方案

本程序是用最优二叉树即哈夫曼树来实现哈夫曼编码译码的功能。根据所输入的报文进行分析,建立哈夫曼树。统计输入字符串的长度,并对每个字符的频度进行计算。对每个字符及相应的频度作为叶节点建立哈夫曼树。哈夫曼树的建立过程采用把结点看做树每次选最小的两个建立树,并把他们的频度相加,再继续选取最小的两个数建立,直到所有结点建立完,才形成完整的哈夫曼树。接下来是对每个叶节点进行编码,从第一个叶结点开始,查看它的双亲,若它是双亲的做左孩子则记0,若是双亲的右孩子则记1,以此往上推,直到哈夫曼的根结点为止。并记录编码存入结点中。即每个结点要存入它的字符,频度,编码,双亲,左孩子,右孩子。再输出报文字符串所对应的编码。根据编码所建立的哈夫曼树,输入一段编码,进行译码。译码过程由根结点往下,若是0则找它的左孩子,若是1找它的右孩子,直到找到叶节点为止,并输出它的字符。

主程序基本思路如下:

输入一段报文 输入要译码的编码

- 3 -

对报文进行频度,长度分析 构造哈夫曼树 根据哈夫曼树进行编码 输出编码 根据哈夫曼树译码 输出译码 图2-1 主要流程

武汉工程大学计算机科学与工程学院 综合设计报告

第三章 详细设计

3.1 主要函数流程图

(1)构建哈夫曼树

开始

输入报文计算频度

并令i=0,t=长度

N i<2*t-1

Y 找出根结点频度最小及 次小树 p1,p2 合并成新树T[i]

i++

结束

图3-1 构建流程图

- 4 -

武汉工程大学计算机科学与工程学院 综合设计报告

(2)哈夫曼编码 开始

第一个字符i=0

N i

Y 结点是 根结点

N

夫结点的左结

点==该结点?

N Y

编码记0

编码记

i++

结束

图3-2 编码流程图

存储编码

- 5 -

武汉工程大学计算机科学与工程学院 综合设计报告

(3)哈夫曼译码 开始 输入编码,长度p 第一个字符 pare=0

N T[pare]为根

Y i

开始 Y

结点是叶节 Y 点?

N 输出叶子结点 代表的字符 编码序列号

为0?

N Y 向左孩子移 向右孩子移

结束

图3-3 译码流程图

- 6 -


哈夫曼编码设计报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小型SQL数据库系统(成绩管理系统)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: