哈夫曼树编码课程设计实验报告.doc
《哈夫曼树编码课程设计实验报告.doc》由会员分享,可在线阅读,更多相关《哈夫曼树编码课程设计实验报告.doc(30页珍藏版)》请在沃文网上搜索。
1、目 录摘 要IIAbstractIII第一章 设计概述11.1 实验背景11.2 设计目的1第二章 设计简介及设计方案论述32.1 方案论述3第三章 详细设计43.1 结构体的定义43.2 主函数定义43.2 副函数定义5第四章 设计结果及分析114.1 设计结果显示114.2 设计结果分析12总 结13致 谢14参考文献15代码附录16摘 要在这次课程设计中,所进行的实验是:哈夫曼编码和编译器。对哈夫曼树进行建立,由节点的权值建立最小二叉树,哈夫曼树haftree,并由所建立的哈夫曼树进行编码,求出各个节点的编码。在由所求的哈夫曼树,输入一段二进制电文,能够输出那所建立的哈夫曼树中的节点。建
2、立的haftree用图形化表示出来。在整个代码实现中,窗体的实现,功能的完善,哈夫曼树的建立,哈夫曼树的编码,遇到了许多难题,haftree对象数组的分配空间,节点的属性等都比较困难。在整个过程中,用的是C#语言,包的应用,字符串数组的空间分配,在计算每个字符的权值时,用的是sizeOf()检索整个字符串,计算字符的权值,建立字符出现频度的表格,根据表格中每个字符频度建立起哈夫曼树。从根节点出发检索每个节点的左右孩子,如果是左孩子遍历左边,路径为0,然后左孩子为根节点;如果是右孩子,遍历右孩子,路径为1,然后右孩子为根节点。在重新上述方法,直到所有的节点都遍历完,每个节点的编码就确定后输出来。
3、在译码过程中,由所输入的二进制电文,根据所建立的哈夫曼树,如果是0走左边,如果是1,走右边,直到节点的左右孩子为空时,输出给节点的信息,在回到根节点重新遍历后面的二进制电文,直到所有电文都遍历完为止,输出所有从电文中译码出来的信息。关键词:编译器;频度;译码AbstractIn this design, the experiment was : Huffman coding and compiler. The Huffman tree to establish, by the node weights to establish a minimum of two fork tree, Huffm
4、an tree haftree, and by the Huffman tree coding, and every node coding. By the Huffman tree, enter a binary message, can output the set up by the Huffman tree nodes. Establishment of haftree graphical representation. In the implementation of the code, the realization form, function perfect, Huffman
5、tree is established, Huffman coding tree, encountered a lot of problems, an array of haftree objects allocated space, node attributes are difficult. Throughout the process, using the C# language, the application package, an array of strings in the spatial distribution, calculated for each weight of
6、characters, using sizeOf to retrieve the entire string, calculating the weight of characters, establish character appearance frequency of form, form the basis of each character frequency established Huffman tree. Starting from the root node to retrieve each node around children, if children left tra
7、verse left, path 0, then left the child as the root node; if it is right child, traversing the right path for children, then the right. In new method described above, until all of the node traversal finished, each node is determined after coding。In the decoding process, by the input binary message,
8、according to the established Huffman tree, if it is 0 the left, if it is 1, go right, until the left and right child node is empty, the output to the node information, in the back of the root node to traverse behind a binary message, until all message traversal finished so far, the output from all .
9、 Keywords: compiler;frequency;decoding第一章 课题背景1.1 设计背景目的及意义1.1.1设计背景在当今信息时代,信息技术已经成为当代知识经济的核心技术。我们时刻都在和数据打交道。但是这些海量的数据是怎么保存在计算机里面的呢?在客户需要数据时它又是怎么发送给用户的呢?这就涉及到哈弗曼编码的技术了。哈弗曼编码在这种背景下,适应时代的要求诞生了。作为无损压缩算法,哈弗曼编码用途非常广泛,在各个领域都有应用。1.1.2设计目的这次可课程设计主要是回顾我们上学期所学习的数据结构这门课程,重新温习一下这些经典算法,加深对它们的影响,以至于今后更好的应用这些经典算法,
10、还有就是培养我们的程序设计算法,平时都是在教室里上课,很少有像这样集体性的编程,通过这次课程设计,不仅能加强我们的编程能力,更能加强我们的程序设计能力。1.1.3设计意义这次课程设计很有意义。哈夫曼编码是个很有用、很有效的编码方式,是一个伟大的发明。通过这次课程设计,让我们亲身体会到了课本上知识的作用和重要性,从而达到了学以致用的目的,让我们对今后的学习有了更清楚的方向和更加强烈的兴趣。1.2理论依据和工作原理1.2.1 理论依据哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现
11、概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。 1.2.2工作原理 哈夫曼编码依据字符出现的频率来构造一棵二叉树,然后根据这棵树对字符进行编码,这种编码机制使用最短编码来表示字符串,大大节省了字符传递时的长度,在网络通信中,特别是网络流量方面作用特别明显,它大大节省了网络资源,提高了网络运行速度,方便了人们的生活。 第二章 设计简介及设计方案论述2.1设计简介这次课程设计是哈夫曼编码,要求实现可视化编程。哈夫曼树是一种很有用的数据结构,在数据传输方面更显方便,它能用较少的编码代替复杂的字符。我们这次课程设计就是要实现对一段报文进行哈弗曼编码,然后随便输
12、入一段编码,根据前面的编码进行解码。2.2设计方案的论述 看到这个课程设计,第一感觉就是不怎么难。因为哈弗满编码主要代码课本上都有,我们只需要将代码添加到窗体类中就可以。首先,我设计了3个类,分别是HafumanNode类,HafumanT类和Form1主窗体类。HafumanNode类是哈弗曼节点类,这个类中有public char data; public int pinDu; public double weight; public int parent;public int lchild; public int rchild;这六个字段和构造函数public HafumanNode(c
13、har c,double w)。还有就是HafumanT类,这个类中主要实现哈夫曼树的构造和编码以及解码。Form1类是主窗体类,在这里就不详细介绍了,在后面详细设计里面会有详细分析。第三章 详细设计3.1 总体分析这次课程设计,我设计了3个类,分别是哈夫曼节点类(HafumanNode)、哈夫曼树(HafumanT)、主窗体类(Form1)。这些类各有各的功能和作用,分别实现不同的功能,这样设计使代码更显调理性,而不至于把所有的功能都写在一个类里面,钠那样显得没有调理,很乱,可读性和可维护性不强。 3.2详细分析3.2.1 HafumanNode类这个类的主要代码如下:class Hafum
14、anNode public char data; public int pinDu; public double weight; public int parent; public int lchild; public int rchild; public HafumanNode(char c,double w) data = c; weight = w; pinDu = 0; parent = -1; lchild = -1; rchild = -1; 这个类比较简单,代码非常少,这个类相当于课本上C语言中的结构体,只是在C#中我用类来实现。3.3.2 HafumanT类这个类有点复杂,因为
15、它要实现很多功能。这里就不详细列出它的所有代码了,而是把主要代码展示如下:public void CreateHafumanTree() int lchild, rchild; double min1, min2; int number = listNode.Count; for (int i = number; i number * 2 - 1; i+) lchild = -1; rchild = -1; min1 = 3000; min2 = 3000; for (int j = 0; j i; j+) if(listNodej.parent=-1) if (listNodej.weigh
16、t min1) min2 = min1; rchild = lchild; min1 = listNodej.weight; lchild = j; else if (listNodej.weight min2) min2 = listNodej.weight; rchild = j; double w = listNodelchild.weight + listNoderchild.weight; HafumanNode newNode = new HafumanNode(#, w); newNode.lchild = lchild; newNode.rchild = rchild; lis
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼树 编码 课程设计 实验 报告