算法与数据结构课程设计哈夫曼编译码系统宾馆客房管理系统.doc
《算法与数据结构课程设计哈夫曼编译码系统宾馆客房管理系统.doc》由会员分享,可在线阅读,更多相关《算法与数据结构课程设计哈夫曼编译码系统宾馆客房管理系统.doc(32页珍藏版)》请在三一办公上搜索。
1、*实践教学* 兰州理工大学计算机与通信学院2015年秋季学期算法与数据结构课程设计题 目:哈夫曼编译码系统 宾馆客房管理系统专业班级:软件工程(2)班 姓 名: 学 号: 指导教师: 成 绩:_目 录摘 要3一哈夫曼编译码系统41.采用类语言定义相关的数据类型42.算法设计53.函数的调用关系图54.调试分析95.测试结果96.源程序(带注释)12二宾馆客房管理系统201.采用类语言定义相关的数据类型202.算法设计203.函数的调用关系图204.调试分析225.测试结果226.源程序(带注释)24总 结30参考文献31致 谢32摘 要Huffman编码是一种可变长编码方式,是二叉树的一种特殊
2、转化形式。它的原理是:将使用次数多的代码转换成长度较短的编码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。本文根据Huffman编码原理,在详细设计中,根据权值和最小的根本原则,我们输入要编码的字符集及其它的权值,再根据在概要设计中提到的节点Node类,算法SuanFa类以及主类JieMian类,建立哈夫曼树,并进行编码,最后输出哈夫曼编码。在完成Huffman编码后,我们利用其构建的哈夫曼编码树来进行译码。与编码过程不同,译码过程中,我们将用户输入的二进制代码串依次与字符集中的每个字符的编码进行比较,译出一个字符后,循环比较下一个字符的编码,直到所有二进制码全部译出为止。在编
3、码和译码的过程中,我们遇到很多问题,诸如算法、语法问题,但我们都通过不断的分析,和调试将这些问题一一解决,最终建立了一个完整的编/译近年来,宾馆业迅猛发展,市场的竞争日趋激烈,全面提高宾馆的软件管理水准,已成为宾馆业发展的当务之急。尤其是对于星级宾馆,既需要完成前台的一些服务工作,还需要完成后台的管理工作。然而,传统的人工管理模式已经远远不能满足有效、快捷地处理经营中产生的大量信息数据的需要,从而使得企业决策层无法及时、准确地掌握一线资料,继而影响对市场进行正确地分析和预测。像沿海城市三星级以上宾馆引进外方管理,使小部分宾馆管理水准几乎接近或达到国际水平。但对占80%以上的广大中小型宾馆来说,
4、是难以做到的。因此,欲在竞争中甩开对手,取得优势,必须在经营、管理、产品、服务等方面具备独到之处。而对宾馆的经营状况起决定作用的是客房的管理。简单的服务标准已不是制胜的锦囊,只有管理做到最细微之处,才能让顾客体会到宾馆服务的高标准、高质量,而准确、快速、周全往往就是最基本的成功要素。传统的管理方法已经不能适应现代社会的需要,因此采用电脑管理业务、财务等诸多环节已成为推动宾馆业迅速发展的先决条件,宾馆客房管理信息系统是各大中小型宾馆所需要使用的一个管理系统。关键词: 关键词:Huffman编码树;最优二叉树;编码;译码;宾馆客房;管理;顺序遍历;模块。一哈夫曼编译码系统利用赫夫曼编码进行通信可以
5、大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站编写一个赫夫曼码的编/译码系统。 哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这种方法是由David.A.Huffman发展起来的。例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇
6、英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。1. 采用类语言定义相关的数据类型 typedef structunsigned int weight;unsigned int parent, lchild, rchild; HTNode, *HuffmanTree; int weight;int parent;int lchild;int
7、 rchild;Hnodetype;typedef structint bitMaxbit;int start;Hcodetype;int n=0;void inputfun(Hnodetype huffnodeMaxnode)/输入叶子节点的个数及权值:初始化函数2. 算法设计1.构造哈夫曼树,使用静态链表作为哈夫曼树的存储在构造哈夫曼树时,设计一个结构体数组Huffnode来保存哈夫曼树的各个结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组Huffnode的大小设置为2n-1,在实际设计过程中,定义符号常量Maxleaf,为最大的叶节点的个数,然后再
8、定义一个符号常量Maxnode 为Maxleaf*2-1,代表最大的总的结点的个数。2求哈夫曼编码时使用一维结构数组Huffcode作为哈夫曼编码信息的存储。求哈夫曼编码,实质上就是在已建立的哈夫曼树中,从叶子结点开始,沿叶结点的双亲链域回退到根结点,每回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼码值。由于一个字符的哈夫曼编码是从根结点到相应叶结点所经过的各个分支所组成的0,1序列,因此先得到的分支代码为所求代码的低位码,后得到的分支代码为所求编码的高位码。3.采用文件读写的方式读取结点信息,存入结点信息,减少传递参数带来的不便,且同时将数据信息有效的保存起来。3. 函数的调用关系
9、图开始从data1.txt读取n 从data2.txt读取huffnode incd.start=n-1左孩子将0存入bit将1存入bit否是start-将cd的值赋给huffcode是将huffcode存入文件data3.txt结束开始从data1.txt读取n 从data2.txt读取huffnode 从data3.txt读取huffcode 输入字符串a长度为len沿左孩子遍历ai=0ai=1沿右孩子遍历叶结点是遍历huffcode寻找对应字符存入文件data4.txt否结束开始输入m(0-3)m不为0inputfun()creattree() codefun()output2()out
10、putcode()encode()m=1m=2m=3从文件data1.txt中读取n从文件data1.txt中读取nn为0n为0否否是是m=0结束4.调试分析a、 调试过程中遇到的问题主要是对部分变量的定义不明确导致程序在运行时不能理解该变量的意义,还有就是刚开始设计函数时是按照功能模块来设计的,所以在最后的代码调试阶段出现大量的功能模块融入不到一块的问题。解决这些问题主要是通过阅读相关的文献重新学习C语言而解决的。b、算法的时间复杂度和空间复杂度都是O(nlogn)。5. 测试结果1.初始化函数2.输出函数2.1输出各个结点的权重、左孩子、右孩子、双亲结点的下标的编码表及叶结点的字符对应编码
11、的编码情况3.译码函数4.此时的4个文本文件6.源程序(带注释)int i;char zifu10;ofstream in;in.open(data1.txt,ios:trunc);coutn;while(n20)coutn;innn;for(i=0;i2*n-1;i+)huffnodei.weight=0;huffnodei.parent=-1;huffnodei.lchild=-1;huffnodei.rchild=-1;cout请分别输入这n个叶子节点的字符名称及权值;for(i=0;in;i+)coutendlzifui;inzifui ;couthuffnodei.weight; i
12、nhuffnodei.weightn; out1.close();for(i=0;in-1;i+)m1=m2=Maxvalue;x1=x2=0;for(j=0;jn+i;j+)if(huffnodej.parent=-1&huffnodej.weightm1)m2=m1;x2=x1;m1=huffnodej.weight;x1=j;else if(huffnodej.parent=-1&huffnodej.weightm2)m2=huffnodej.weight;x2=j;huffnodex1.parent=n+i;huffnodex2.parent=n+i;huffnoden+i.weigh
13、t=huffnodex1.weight+huffnodex2.weight;huffnoden+i.lchild=x1;huffnoden+i.rchild=x2;ofstream in;in.open(data2.txt,ios:trunc);for(i=0;i2*n-1;i+)inhuffnodei.weight huffnodei.lchild huffnodei.rchild huffnodei.parentm; out1.close();fstream out;out.open(data2.txt,ios:in);for(int i=0;iabcd;couta b c dn; out
14、1.close();fstream out2;out2.open(data2.txt,ios:in);for(i=0;ihuffnodei.weighthuffnodei.lchildhuffnodei.rchildhuffnodei.parent;for(i=0;in;i+)cd.start=n-1;c=i;p=huffnodei.parent;while(p!=-1)if(huffnodep.lchild=c)cd.bitcd.start=0;else cd.bitcd.start=1;cd.start-;c=p;p=huffnodec.parent;for(j=cd.start+1;jn
15、;j+)huffcodei.bitj=cd.bitj;huffcodei.start=cd.start;out2.close();ofstream in;in.open(data3.txt,ios:trunc);for(i=0;in;i+)inhuffcodei.start ;for(int j=huffcodei.start+1;jn;j+)inhuffcodei.bitj ;inm;for(int c=0;csw;coutsb;for(int r=b+1;rd; coutd;coutn;for(int v=0;vzifuvw; out1.close();fstream out2;out2.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 课程设计 哈夫曼编 译码 系统 宾馆 客房 管理
链接地址:https://www.31ppt.com/p-2396897.html