哈夫曼编码课程设计报告.pdf

哈夫曼编码课程设计报告.pdf

ID:48000244

大小:257.50 KB

页数:23页

时间:2020-01-11

哈夫曼编码课程设计报告.pdf_第1页
哈夫曼编码课程设计报告.pdf_第2页
哈夫曼编码课程设计报告.pdf_第3页
哈夫曼编码课程设计报告.pdf_第4页
哈夫曼编码课程设计报告.pdf_第5页
资源描述:

《哈夫曼编码课程设计报告.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构课程设计报告课题:专业班级:学号:姓名:指导教师:1课程设计的目的和意义在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。通常我们把数据压缩的过程称为编

2、码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。2.需求分析课题:哈夫曼编码译码器系统问题描述:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。问题补充:1.从硬盘的一个文件里读出一段英语文章;2.统计这篇文章中的每个字符出现的次数;3.以字符出现字数作为权值,构建哈夫曼树4.对每个字符进行编码并将所编码写入文件然后对所编码进行破译。具体介绍:在本课题中,我们在硬盘D盘中预先建立一个file.txt

3、文档,在里面编辑一篇文章(大写)。然后运行程序,调用fileopen()函数读出该文章,显示在界面;再调用tongji()函数对该文章的字符种类进行统计,并对每个字符的出现次数进行统计,并且在界面上显示;然后以每个字符出现次数作为权值,调用Create_huffmanTree()函数构建哈夫曼树。然后调用Huffman_bianma()函数对哈夫曼树进行编码,调用coding()函数将编码写入文件。测试数据:例如从文本中读到文章为:IAMASTUDENT。则效果如下:读出文本为:IAMASTUDENT字符A次数:2字符D次数:1字符E次数:1字

4、符I次数:1字符M次数:1字符N次数:1字符S次数:1字符T次数:2字符U次数:1输出编码:00010100110101111010011101111010110Pressanykeytocontinue3系统(项目)设计(1)设计思路及方案本课题是用最优二叉树即哈夫曼树来实现哈夫曼编码译码器的功能。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长度为(W1*L1)+(W2*L2)+…+(Wi*Li)。若将此对应到二叉树上,Wi为叶结点,Li为根结点到叶结点的路径长度。那么,(W1*L1)+(W2*L2)+

5、…+(Wi*Li)恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。该系统将实现以下几大功能:从硬盘读取字符串,建立哈夫曼树,输出哈夫曼树的存储结构的初态和终态,输出各种字符出现的次数以及哈夫曼编码的译码等。(2)模块的设计及介绍1从硬盘读取字符串fileopen(参数){实现命令;打印输出;}2建立HuffmanTree通过三个函数来实现:voidselect_min(参数){初始化;for{接受命令;处理命令;}}说明:在ht[1....k]中选择p

6、arent为0且权值最小的两个根结点的算法inttongji(参数){初始化;for{接受命令;处理命令;}}说明:统计字符串中各种字母的个数以及字符的种类voidCreate_huffmanTree(){初始化;for{接受命令;处理命令;}输出字符统计情况;}说明:构造哈夫曼树3哈夫曼编码voidHuffman_bianma(参数){定义变量;{处理命令;}}说明:哈夫曼编码(3)主要模块程序流程图下面介绍三个主要的程序模块流程图:①主函数流程图:结束统计字符种类及频率字符总数num建立哈夫曼树哈夫曼编码打开文件?开始否是图3.1流程图注释

7、:该图比较简单,主要是调用各个函数模块,首先代开已经存在的文件,然后统计总的字符数以及出现的各个字符和频率。然后才开始建立哈夫曼树,接着在哈夫曼树的基础上对其进行编码。最后输出结束。②构造哈夫曼树:开始结束第i个结点权值i=num?创建哈夫曼树输出字符统计情况第i个根结点i=2*num-1?i=num?否是否是否是图3.2流程图注释:该图是表示构造哈夫曼树的过程。首先输入num个叶结点的权值,当i=num是循环结束。然后进行哈夫曼树的构建,当i=2*num-1是循环结束。最后输出所得到的字符统计情况。③哈夫曼编码:结束开始T[p].left=c

8、?i<=num?Cd[--start]=0,start=numCd[--start]=0Cd[--start]=1否否是是图3.3流程图解释:该流程图

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。