文档详情

哈夫曼树课程设计 哈夫曼树的编码,译码.doc

发布:2017-10-16约7.24千字共14页下载文档
文本预览下载声明
广东技术师范学院天河学院 算法与数据结构 课程设计报告 题 目: 哈夫曼编/译码器 设 计 者: 专业班级: 本网络101 学 号: 02 指导教师: 所属系部: 计算机科学与技术系 2012年 06月 3 日 目 录 1 问题描述及要求 1 2 需求分析 1 3 算法思想描述 1 4 概要设计 2 1.创建哈夫曼树及函数调用过程 2 2.输出哈夫曼数节点的权值的及调用过程 3 3.进行哈夫曼编码及调用过程 3 4.字符串-哈夫曼码及调用过程 4 5 详细设计 4 1.创建哈夫曼树 4 2.显示HT的终结状态 5 3.打印哈夫曼编码 5 4.打印哈夫曼树 5 5.字符串-哈夫曼编码 6 6.源程序清单 7 6 测试数据及分析 10 1.创建哈夫曼树 10 2.显示HT的终结状态 10 3.打印哈夫曼编码 10 4.打印哈夫曼树 11 5.字符串-哈夫曼编码 11 7课程设计总结 11 8 参考资料 12 哈夫曼编/译码器 1 问题描述及要求 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。对于双工信道(即可以双向传输信息的信道),每端都需要一个完成的编\译码系统。试为这样的信息收发站写一个哈夫曼的编\译码系统。 设计要求: 1. 初始化。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。 2. 编码。利用已建好的哈夫曼树,对正文进行编码。 3. 译码。对编码好的内容进行译码。 4. 打印编码。 5. 打印哈夫曼树 2 需求分析 (1)再通信过程中,为了提高信道利用率,缩短信息传输时间降,低传输成本 ,需要一编译码器。 (2)此哈夫曼编/译码器应具有编和译的双向功能,即在发送端通过编码系统对传入的数据进行编码, 在接受端将数据译码.将具有这两项功能的编译码器用于双工信道,就可满足 双工信道的双向编译功能. (3) 输入某段报文时,系统将自动完成编译输出. 3 算法思想描述 1:初始化。从中端读入字符集大小n,以及n个字符和n各权值 ,建哈夫曼树,并存于hfmTree中 2:编码。利用已建好的树,对文件 ToBeTran中的正文进行编码, 然后将结果存入文件CodeFile . 3:译码。利用已建好的树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 4:印代码文件CodeFile。将文件以紧凑格式显示在终端上,每行50个代码 。 同时将此字符形式的编码文件写入文件CodePrin中。 5:印哈夫曼树。将已在内存中的树以直观的方式(树或凹入表形式)显示在终端,同时将此字符形式的哈夫曼树写入文件TreePrin中。 4 概要设计 本程序主要定义了4个函数: void CreateHT(HuffmanTree HT,int n);void preorderHT(HuffmanTree HT,int m);void GetHhffanCode(HuffmanTree HT,HuffmanCode HC,int n); void strHT(HuffmanTree HT,HuffmanCode HC,int n) 1.创建哈夫曼树及函数调用过程 函数:void CreateHT(HuffmanTree HT,int n) 功能:构造哈夫曼树 2.输出哈夫曼数节点的权值的及调用过程 函数:void preorderHT(HuffmanTree HT,int m) 功能:显示HT的终结状态 3.进行哈夫曼编码及调用过程 函数:void GetHhffanCode(HuffmanTree HT,HuffmanCode HC,int n) 功能:打印哈夫曼编码 4.字符串-哈夫曼码及调用过程 函数:void strHT(HuffmanTree HT,HuffmanCode HC,int n) 功能:输入一个字符串,显示该字符的哈夫曼编码 5 详细设计 1.创建哈夫曼树 void CreateHT(HuffmanTree HT,int n){//创建哈夫曼树 int i,k,Lnode,Rnode,Min1,Min2; if(n=1)return; HT=new HNode[2*n-1]; strread(ch); printf(请输入字符的权值\n); for(i=0;in;i++){//初始化HT printf(%c = ,ch[i]); scanf(%d,HT[i].weight); HT[i].parent=-1; HT[i].
显示全部
相似文档