ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:95.11KB ,
资源ID:18599243      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18599243.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈弗曼编码综合设计报告Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哈弗曼编码综合设计报告Word格式.docx

1、 xxxxxx 班级: xxxxxxxxxx 类别合计分值各项分值评分标准实际得分合计得分备注平时表现10按时参加综合设计,无旷课、迟到、早退、违反实验室纪律等情况。完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。报告质量35报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。设计方案合理、可行,论证严谨,逻辑性强,具有说服力。符号统一;图表完备、符合规范要求。能对整个设计过程进行全面的总结,得出有

2、价值的结论或结果。参考文献数量在3篇以上,格式符合要求,在正文中正确引用。答辩情况25在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。总评成绩: 分补充说明: 指导教师: xxxxxx (签字)日 期: xxxx年 x 月 xxx 日答辩记录表 xxxxxx 学号: xxxxxxx 班级: xxxxxx 答辩地点:答辩内容记录:答辩成绩答辩小组成员(签字): xxxx 年 x 月xx 日指导教师评语指导教师: xxxxxxx (签字) xxxx 年 x 月 xxx 日一、综合设计目的、条件、任务和内容要求:

3、数据结构在计算机科学中是一门核心专业基础课,在整个计算机课程体系中处于承上启下的核心地位,它一方面扩展和深化在离散数学、程序设计语言等课程学到的基本技术和方法,一方面为进一步学习其它专业课奠定坚实的理论与实践基础。课程的主要任务是学习数据的逻辑结构,存储结构以及相关的算法设计。应用软件综合设计是计算机科学与技术专业学生的一门实践课程,是学习完数据结构课程后的课程设计,本课程的目的是使学生学会分析待加工处理数据的特性,以便选择适当的逻辑结构、存储结构以及进行相应的算法设计。在教给学生数据结构选择和算法设计的同时,培养学生的抽象思维能力、逻辑推理能力和形式化思维方法,增强分析问题和解决问题的能力。

4、 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。综合设计的任务是:设计一个哈夫曼编码/译码系统,使学生掌握哈夫曼编码的特点、存储方法和基本原理,培养学生利用C+语言编写程序以及调试程序的能力,运用数据结构知识解决实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。内容:分两个层次层次一:用下表中给出的字符和频度数据编程建立哈夫曼树,并实现对以下报文进行编码/译码。THIS PROGRAM IS MY FAVORITE字符空格ABCDEFGHIJKLM频度186641322321032147571NOPQRSTUVWXYZ634851802381816层次二

5、:编程从键盘任意输入一段报文,首先统计字符的频度,然后建立哈夫曼树,并给出报文的编码/译码。 指导教师签字: xxxxxxxx xxxxxxxx 年 x 月 x 日二、进度安排:第3周(9.13-9.14) : 学生熟悉课题的任务和要求,查阅相关文献和资料,并做好编码准备第3周 (9.14-9.17) :程序编码、调试第4周 (9.20-9.23) :程序编码、调试和测试,书写报告第4周 (9.24): 答辩、检查、验收、递交设计报告三、应收集资料及主要参考文献:应收集的资料:面向对象程序设计思想和方法C/C+语言参考手册数据结构、软件工程方面参考书籍主要参考文献:1 李晓林,张俊程序设计基础

6、M北京:中国铁道出版社 ,20082 张俊,张彦铎C+面向对象程序设计M北京:3 陈慧南数据结构使用C+语言描述M北京:人民邮电出版社 ,2008四、综合设计(课程设计)摘要(中文):利用所学的数据结构和其他C+语言,设计一个哈夫曼编码/译码系统,实现两个层次的编码/译码功能,第一个层次是利用给定的字符和对应的频度数据构建哈夫曼数实现对报文的编码/译码,另一个层次则是输入任意一段报文,统计其频度,然后构建哈夫曼数,实现报文的编码/译码。两者不同之处在于频度是否给定和未知,通过C+语言编写实现这两个方面的要求。在编写实现过程中要注意最后是需要利用文件流进行输入报文和编/译码的,因此在编写程序代码

7、中注意适当的调整代码的结构语言,使能够与文件流方面的要求匹配,节省编写代码的时间。本次课程设计中,充分的运用了全局变量编写代码,实现了报文的存取和运算,实现课程设计的要求,并且能够可视化的输入输出报文,存在文档里。五、综合设计(课程设计)Abstract(英文):Use the data structure and the other the c + + language, design a hoffmann encoding/decoding system, realize the encoding/decoding two levels, the first level is the fu

8、nction of the characters and using a corresponding frequency data to construct hoffmann number of message encoding/decoding, another level is a message, any input frequency, and then construct the number of hoffmann, realize the message encoding/decoding. Both differs is given and the unknown freque

9、ncy, written by c + + language to achieve both requirements.In the process of writing document flow to use the message and input/decoding, so in writing code of structure adjustment of the appropriate language, make the code and documentation requirements of flow, save the time of writing code.This

10、course design, make full use of the global variables, code access to the message and the course design, realization, and visualization of input and output, the document message.摘 要 IIAbstract . II第一章 哈夫曼编码与译码. 11.1 编码与译码概述.11.2 设计编码与译码问题.1 第二章 哈夫曼编码与译码设计.22.1 编码译码设计简介.2 2.2 编码译码设计方案.2 第三章 编码与译码详细设计.

11、 33.1 哈夫曼编码.3 3.2 哈夫曼译码.6 第四章 设计结果及分析. 74.1 编码结果及分析 .7 4.2 译码结果及分析 .8 总 结 .9 致 谢 .10 参考文献 .11附录 主要程序代码 .12摘 要关键词:哈夫曼树;编码;译码;文件流;全局变量AbstractKeywords:Hoffmann tree; Code; Decoding; Document flow; Global variables第一章 哈夫曼编码与译码1.1 编码与译码概述1.1.1 哈夫曼编码译码背景 Huffman编码是一种可变长编码方式,是由美国数学家David Huffman创立的,是二叉树的一

12、种特殊转化形式。编码的原理是:将使用次数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。Huffman算法的最根本的原则是:累计的(字符的统计数字*字符的编码长度)为最小,也就是权值(字符的统计数字*字符的编码长度)的和最小。 1.1.2 哈夫曼编码译码目的哈夫曼压缩是个无损的压缩算法,一般用来压缩文本和程序文件。哈夫曼压缩属于可变代码长度算法一族。意思是个体符号(例如,文本文件中的字符)用一个特定长度的位序列替代。因此,在文件中出现频率高的符号,使用短的位序列,而那些很少出现的符号,则用较长的位序列。1.2 编码与译码问题分为两个层次的编写,第一层是

13、用给定表中给出的字符和频度数据编程建立哈夫曼树,并实现对报文进行编码/译码,另一层则是编程从键盘任意输入一段报文,首先统计字符的频度,然后建立哈夫曼树,并给出报文的编码/译码。第二章 哈夫曼编码与译码设计2.1 编码译码设计简介2.1.1 哈夫曼编码译码设计思想本次课程设计总体思想是从文件输入报文/码文,然后运行编写的程序自动在另个文件中得到码文/报文,从文件输入的报文提取到内存中,然后构建哈夫曼树,对每个报文中的字符和对应的频度进行分析,然后构建符合要求的哈夫曼树,然后扫描所要编码的报文,找到相对应的字符后,往上找双亲,并且判断左右子树进行编码,最终的到报文的整体码文。译码文则是利用哈夫曼树

14、的原理,扫描码文。01代表左右子树,进行遍历。最终找到叶子,对应的字符输出即可。2.1.2 设计简介设计一个哈夫曼树,其叶子用来存储字符和字符相应的频度,在需要进行编码译码的时候,都要遍历该哈夫曼树,编码的遍历是先找到对应叶子字符,然后增加一个指向双亲的指针,回溯编码,译码则是一个一个扫描码文中的码,然后按照0则左子树,1则是右子树的遍历方式,一旦找到叶子则重新从树的根节点重新遍历,直到最后将码文编写完。2.2 编码译码设计方案 在课程设计中,构建一个哈夫曼树时,需要在叶子中存储两个信息,一个是字符,另一个则是字符对应的频度,由于哈夫曼编码的原理是利用频度进行编码,但是编码译码的时候,我们需要

15、得到字符,因此在哈夫曼类中,增加一个对应的存取字符的变量,这个变量要与频度相关联,并且在基础结构中增加一个指向双亲的指针用于回溯编码,一个另类的哈夫曼树就可以编写了。 编码和译码都是在代码中进行,结果则是在文档中显示,因此设计生成两个文档,一个用于存取字符报文,一个用于存取码文,然后根据用户需要,编码或者是译码。通过可视化的文档能够完成本次的课程设计的要求。第三章 编码与译码详细设计3.1 哈夫曼编码3.1.1 给定字符频度哈夫曼编码对于给定字符频度的报文进行编码,根据所学的哈夫曼编码的知识,在哈夫曼树生成的过程是通过比较权值构建哈夫曼树,这里权值是字符的频度,但是频度对应的字符却不能够存储在

16、哈夫曼树中,因此在结构BTNode中,增加了一个字符型的变量char sysbol,用来存储字符,并且增加了一个int类型的数组Bits存储该结点的码。在BTNode结构中,另外还增加了一个指向双亲结点的指针parent,方便以后查找双亲编码。如下的BTNode的函数代码。templatestruct BTNode BTNode() lChild=rChild=parent=NULL; BTNode(const T& x) element=x;lChild=rChild=parent=NULL; x, BTNode* l,BTNode* r) lChild=l; rChild=r; paren

17、t=NULL;T element;char sysbol;int Bits128;BTNode* lChild, *rChild,*parent;在类BinaryTree中,由于哈夫曼树的构建基本上是通过BinaryTree类中的函数实现,因此将编码和译码函数写入BianryTree类中给类HfmTree调用,这样,在HfmTree类中不需要特别多的函数,只是存在调用类的私有成员函数即可,其他函数都可以放入BianryTree类中。如下代码则是BianryTree类的成员函数和私有成员。 templateclass BinaryTree public: BinaryTree()root=NUL

18、L; bool Root(T &x)const; void MakeTree(const T &e ,BinaryTree&left, BinaryTree right); void PreOrder(void (*Visit)(T& x); BTNode* RetRoot() return root; void FLeaves(char k) FLeaves(root,k); void FLeaves(BTNode * t,char l); void StCode(BTNode* p); void SetCode(BTNode* t); void TransCode() TransCode(

19、root); void TransCode(BTNodeprotected:* root;private: void Clear(BTNode x),BTNode*t);为了将给定字符频度的字符存入到哈夫曼树中,并且能够保证字符和字符频度同时存入,这里定义了一个node结构,它里面包含两个结构变量,int类型变量wet用来存储字符频度,char类型变量sys用来存储相应字符。创建一个该结构的数组,用来存储所有的字符和频度。并且定义一个int型的全局变量count来计算字符的长度。另外当读出码文的时候,最开始那个码文是倒置,用一个全局数组int型的bitslength来存入这些倒置码文,并且记录

20、这么码文的长度。在扫描字符的过程中,将扫描出来的字符在哈夫曼树中进行遍历,遍历到叶子后,利用函数回溯,找出倒置的码文,存在bits数组中,然后倒序赋值给另一个全局数组codestyle,准备存入文件中。一下是这几个全局数组及其对应的全局变量的声明和定义,相同的,定义一个char型的数组wd用存放译码后得到的字符,准备存入文件中。int codestyle128;int lnth=0;int bits128;int length=0;char wd128;int lenth=0;struct node int wet; char sys;struct node Treem;int count=1

21、;对于给定的哈夫曼编码,如何实现对一段报文的编码已经变得非常清晰,首先从文件中一个一个提取字符,然后使用函数FLeaves(BTNode* t,char l)在已知的哈夫曼树上进行遍历,查找字符,当查到匹配的字符后,调用函数SetCode(BTNode* j)回溯遍历双亲,判断是否为双亲的左右子树,然后编码得到倒置的码文,将倒置码文逐个输入到数组bits中,最后将bits中的码文倒置输入到数组codestyle中,实现这个过程需要调用函数StCode(BTNode* p),最后将codestyle中的码文逐个输入到另一个文件中,实现了从文件中输入字符,在给定字符频度的情况下在另一个文件中生成码文。这几个函数的嵌套使用最后实现了编码了功能。下面是这几个程序的函数定义。template void BinaryTree:FLeave

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1