计算机软件及应用哈夫曼树编码课程设计实验报告Word文件下载.docx
- 文档编号:6821366
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:35
- 大小:161.97KB
计算机软件及应用哈夫曼树编码课程设计实验报告Word文件下载.docx
《计算机软件及应用哈夫曼树编码课程设计实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机软件及应用哈夫曼树编码课程设计实验报告Word文件下载.docx(35页珍藏版)》请在冰点文库上搜索。
6、平时表现成绩低于6分的学生,其综合设计成绩按不及格处理。
7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适用于学院各类综合设计),各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。
成绩评定表
张建雄学号:
1005080228班级:
类别
合计
分值
各项分值
评分标准
实际得分
合计得分
备注
平时表现
10
按时参加综合设计,无旷课、迟到、早退、违反实验室纪律等情况。
完成情况
30
20
按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。
能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。
报告质量
35
报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;
报告字数符合相关要求,工整规范,整齐划一。
5
课题背景介绍清楚,综述分析充分。
设计方案合理、可行,论证严谨,逻辑性强,具有说服力。
符号统一;
图表完备、符合规范要求。
能对整个设计过程进行全面的总结,得出有价值的结论或结果。
参考文献数量在3篇以上,格式符合要求,在正文中正确引用。
答辩情况
25
在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。
15
在规定时间内能准确、完整、流利地回答教师所提出的问题。
总评成绩:
分
补充说明:
指导教师:
(签字)
日期:
年月日
答辩记录表
答辩地点:
答辩内容记录:
答辩成绩
答辩小组成员(签字):
指导教师评语
指导教师:
一、综合设计目的、条件、任务和内容要求:
利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。
对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。
试为这样的信息收发站写一个哈夫曼码的编译码系统。
一个完整的哈夫曼码的编译码系统系统应具有以下功能:
I:
初始化(Initialization)。
从终端读入字符集大小n,几个字符和n个权值,建立哈夫曼树,并将它存于文件hfmtree中。
C:
编码(Coding)。
利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
D:
译码(Decoding)。
利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。
P:
打印代码文件(Print)。
将文件codefile以紧凑格式显示在终端上,每行50个代码。
同时将此字符形式的编码文件写入文件codeprint中。
T:
打印哈夫曼树(Treeprinting)。
将已在内存中的哈夫曼树以直观的方式(数或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。
[测试数据]
用下表中给出的字符集和频度的实际统计数据建立哈夫曼数,并实现以下报文的编码和译码:
“THISPROGRAMISMYFAVORITE”。
字符
--
A
B
C
D
E
F
G
H
I
J
K
L
M
频度
186
64
13
22
32
103
21
47
57
1
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
63
48
51
80
23
8
18
16
通过本设计可以巩固已经学过的基础课及专业课知识,开阔学生的视野,锻炼学生的自学能力及独立动手能力。
指导教师签字:
刘黎志
2012年9月17日
二、进度安排:
2012-9-17:
明确所选课题的具体要求,按要求阅读相关的参考文献及资料
2012-9-18至2012-9-27:
课题代码实现、课程设计报告书写
2012-9-28:
课程设计答辩
3、应收集资料及主要参考文献:
[1]李纯莲,刘玉宝,刘金凤等.C#.NET实用教程[M].北京:
电子工业出版社,2011年.100-150.
[2]田鲁怀.数据结构[M].北京:
电子工业出版社,2010年.178-210.
[3]李春葆,尹为民,李蓉蓉等.数据结构教程[M].北京:
清华大学出版社.2010年.210-250.
四、综合设计(课程设计)摘要:
在这次课程设计中,所进行的实验是:
哈夫曼编码和编译器。
对哈夫曼树进行建立,由节点的权值建立最小二叉树,哈夫曼树haftree,并由所建立的哈夫曼树进行编码,求出各个节点的编码。
在由所求的哈夫曼树,输入一段二进制电文,能够输出那所建立的哈夫曼树中的节点。
建立的haftree用图形化表示出来。
在整个代码实现中,窗体的实现,功能的完善,哈夫曼树的建立,哈夫曼树的编码,遇到了许多难题,haftree对象数组的分配空间,节点的属性等都比较困难。
在整个过程中,用的是C#语言,包的应用,字符串数组的空间分配,在计算每个字符的权值时,用的是sizeOf()检索整个字符串,计算字符的权值,建立字符出现频度的表格,根据表格中每个字符频度建立起哈夫曼树。
从根节点出发检索每个节点的左右孩子,如果是左孩子遍历左边,路径为0,然后左孩子为根节点;
如果是右孩子,遍历右孩子,路径为1,然后右孩子为根节点。
在重新上述方法,直到所有的节点都遍历完,每个节点的编码就确定后输出来。
在译码过程中,由所输入的二进制电文,根据所建立的哈夫曼树,如果是0走左边,如果是1,走右边,直到节点的左右孩子为空时,输出给节点的信息,在回到根节点重新遍历后面的二进制电文,直到所有电文都遍历完为止,输出所有从电文中译码出来的信息。
关键词:
编译器;
频度;
译码
五、综合设计(课程设计)Abstract:
Inthisdesign,theexperimentwas:
Huffmancodingandcompiler.TheHuffmantreetoestablish,bythenodeweightstoestablishaminimumoftwoforktree,Huffmantreehaftree,andbytheHuffmantreecoding,andeverynodecoding.BytheHuffmantree,enterabinarymessage,canoutputthesetupbytheHuffmantreenodes.Establishmentofhaftreegraphicalrepresentation.Intheimplementationofthecode,therealizationform,functionperfect,Huffmantreeisestablished,Huffmancodingtree,encounteredalotofproblems,anarrayofhaftreeobjectsallocatedspace,nodeattributesaredifficult.Throughouttheprocess,usingtheC#language,theapplicationpackage,anarrayofstringsinthespatialdistribution,calculatedforeachweightofcharacters,usingsizeOftoretrievetheentirestring,calculatingtheweightofcharacters,establishcharacterappearancefrequencyofform,formthebasisofeachcharacterfrequencyestablishedHuffmantree.Startingfromtherootnodetoretrieveeachnodearoundchildren,ifchildrenlefttraverseleft,path0,thenleftthechildastherootnode;
ifitisrightchild,traversingtherightpathforchildren,1childrenfortherootnode,thentheright.Inthenewmethoddescribedabove,untilallofthenodetraversalfinished,eachnodeisdeterminedaftertheoutputcoding.
Inthedecodingprocess,bytheinputbinarymessage,accordingtotheestablishedHuffmantree,ifitis0theleft,ifitis1,goright,untiltheleftandrightchildnodeisempty,theoutputtothenodeinformation,inthebackoftherootnodetotraversebehindabinarymessage,untilallmessagetraversalfinishedsofar,theoutputfromallthemessagedecodingofinformation.
Keywords:
compiler;
frequency;
decoding
摘要
Abstract
ifitisrightchild,traversingtherightpathforchildren,thentheright.Innewmethoddescribedabove,untilallofthenodetraversalfinished,eachnodeisdeterminedaftercoding。
Inthedecodingprocess,bytheinputbinarymessage,accordingtotheestablishedHuffmantree,ifitis0theleft,ifitis1,goright,untiltheleftandrightchildnodeisempty,theoutputtothenodeinformation,inthebackoftherootnodetotraversebehindabinarymessage,untilallmessagetraversalfinishedsofar,theoutputfromall.
第一章课题背景
1.1设计背景目的及意义
1.1.1设计背景
在当今信息时代,信息技术已经成为当代知识经济的核心技术。
我们时刻都在和数据打交道。
但是这些海量的数据是怎么保存在计算机里面的呢?
在客户需要数据时它又是怎么发送给用户的呢?
这就涉及到哈弗曼编码的技术了。
哈弗曼编码在这种背景下,适应时代的要求诞生了。
作为无损压缩算法,哈弗曼编码用途非常广泛,在各个领域都有应用。
1.1.2设计目的
这次可课程设计主要是回顾我们上学期所学习的数据结构这门课程,重新温习一下这些经典算法,加深对它们的影响,以至于今后更好的应用这些经典算法,还有就是培养我们的程序设计算法,平时都是在教室里上课,很少有像这样集体性的编程,通过这次课程设计,不仅能加强我们的编程能力,更能加强我们的程序设计能力。
1.1.3设计意义
这次课程设计很有意义。
哈夫曼编码是个很有用、很有效的编码方式,是一个伟大的发明。
通过这次课程设计,让我们亲身体会到了课本上知识的作用和重要性,从而达到了学以致用的目的,让我们对今后的学习有了更清楚的方向和更加强烈的兴趣。
1.2理论依据和工作原理
1.2.1理论依据
哈夫曼编码(HuffmanCoding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。
Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。
1.2.2工作原理
哈夫曼编码依据字符出现的频率来构造一棵二叉树,然后根据这棵树对字符进行编码,这种编码机制使用最短编码来表示字符串,大大节省了字符传递时的长度,在网络通信中,特别是网络流量方面作用特别明显,它大大节省了网络资源,提高了网络运行速度,方便了人们的生活。
第二章设计简介及设计方案论述
2.1设计简介
这次课程设计是哈夫曼编码,要求实现可视化编程。
哈夫曼树是一种很有用的数据结构,在数据传输方面更显方便,它能用较少的编码代替复杂的字符。
我们这次课程设计就是要实现对一段报文进行哈弗曼编码,然后随便输入一段编码,根据前面的编码进行解码。
2.2设计方案的论述
看到这个课程设计,第一感觉就是不怎么难。
因为哈弗满编码主要代码课本上都有,我们只需要将代码添加到窗体类中就可以。
首先,我设计了3个类,分别是HafumanNode类,HafumanT类和Form1主窗体类。
HafumanNode类是哈弗曼节点类,这个类中有publicchardata;
publicintpinDu;
publicdoubleweight;
publicintparent;
publicintlchild;
publicintrchild;
这六个字段和构造函数publicHafumanNode(charc,doublew)。
还有就是HafumanT类,这个类中主要实现哈夫曼树的构造和编码以及解码。
Form1类是主窗体类,在这里就不详细介绍了,在后面详细设计里面会有详细分析。
第三章详细设计
3.1总体分析
这次课程设计,我设计了3个类,分别是哈夫曼节点类(HafumanNode)、哈夫曼树(HafumanT)、主窗体类(Form1)。
这些类各有各的功能和作用,分别实现不同的功能,这样设计使代码更显调理性,而不至于把所有的功能都写在一个类里面,钠那样显得没有调理,很乱,可读性和可维护性不强。
3.2详细分析
3.2.1HafumanNode类
这个类的主要代码如下:
classHafumanNode
{
publicchardata;
publicintlchild;
publicHafumanNode(charc,doublew)
data=c;
weight=w;
pinDu=0;
parent=-1;
lchild=-1;
rchild=-1;
}
这个类比较简单,代码非常少,这个类相当于课本上C语言中的结构体,只是在C#中我用类来实现。
3.3.2HafumanT类
这个类有点复杂,因为它要实现很多功能。
这里就不详细列出它的所有代码了,而是把主要代码展示如下:
publicvoidCreateHafumanTree()
intlchild,rchild;
doublemin1,min2;
intnumber=listNode.Count;
for(inti=number;
i<
number*2-1;
i++)
min1=3000;
min2=3000;
for(intj=0;
j<
i;
j++)
if(listNode[j].parent==-1)
if(listNode[j].weight<
min1)
min2=min1;
rchild=lchild;
min1=listNode[j].weight;
lchild=j;
elseif(listNode[j].weight<
min2)
min2=listNode[j].weight;
rchild=j;
doublew=listNode[lchild].weight+listNode[rchild].weight;
HafumanNodenewNode=newHafumanNode('
#'
w);
newNode.lchild=lchild;
newNo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 应用 哈夫曼树 编码 课程设计 实验 报告