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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

哈夫曼编码译码.docx

1、哈夫曼编码译码哈夫曼编码译码一、【实验内容】 【问题描述】 利用哈夫曼编码进行住处通讯可以大大提高信道利用率,缩短住处传输时间,降低成本,但是,这要求在发送端通过一个编码系统将传输的数据预先编码,在接收端通过一个译码系统对传来的数据进行译码(复原),对于双向传输信息的信道,每端都一个完整的编码译码系统,试为这样的住处收发站写一个哈夫曼友的编码译码系统. 【基本要求】:一个完整的系统应以下功能: (1) I. 初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存放在文件hfmTree中. (2) E. 编码(Encoding)。利用已建立

2、好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果代码存(传输)到文件CodeFile中. (3) D. 译码(Decoding)。利用已建好的哈夫曼树,对传输到达的CodeFile中的数据代码进行译码,将译码结果存入文件TextFile中. (4) P. 印文件代码(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。 (5) T. 印哈夫曼树(TreePrinting)。将已在内存中的哈夫曼树以直观的方式(树或凹入表的形式)显示在终端上,同时将此字符形式的

3、哈夫曼树写入文件TreePrint中。 测试数据: (1) 利用教科书例6-2中的数据调试程序。 (2) 用下表给出的字符集和频度的计数据建立哈曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”.。 字符 A B C D E F G H I J K L M 频数 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频数 57 63 15 1 48 51 80 23 8 18 1 16 1 二、实验目的 树型结构是一种应用极为广泛的非线性数据结构,也是本课程的重点内

4、容,哈夫曼树(最优二叉树)是树型结构的典型应用,本次实验突出了数据结构加操作的程序设计观点,希望能根据树型结构的非线性特点,熟悉各种存储结构的特性,达到如何应用树型结构的非线性特点,熟悉各种存储结构的特性,达到如何应用树型结构解决具体问题的目的. 三、实验文档: 哈夫曼编码/译码 一、 需求分析 1、 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时 间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(既可以双向传输信息的信道),每端都需要一个完整的编/译码系统。本次设计就是为这样的信息收发站写的一个哈夫

5、曼的编/译码器。 本实验要求: 2、本演示程序中,用户可以输入键盘中的任意字符,长度为任意长,字符输入顺序不限,且允许出现重码 3、演示程序以用户与计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据(可虑去输入中的非法字符)和运算结果显示在其后。 4、本演示程序中,当用户选择的功能错误时,系统会输出相应的提示。 5、在本系统中,用户可以对任意长的字符串可进行编码/译码。 6、程序执行的命令包括: 1) 初始化(I) 2) 编码(E) 3) 译码(D) 4) 印代码文件(P) 5) 印哈夫曼树(T) 6) 退出(Q) ,、测试数

6、据: (,)利用教科书例6-2中的数据调试程序。 (,)用下表给出的字符集和频度的计数据建立哈曼树,并实现以下报文的 编码和译码:“THIS PROGRAM IS MY FAVORITE”.。 字符 A B C D E F G H I J K L M 频数 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频数 57 63 15 1 48 51 80 23 8 18 1 16 1 二、概要设计 为实现上述程序功能,应以指针存储结点。为此,需要定义一个抽象数据类型。 1. 抽象数据类型定义为: ADT H

7、uffmanTree 数据对象:D=ai| ai?CharSet,i=1,2,n, n?0 数据关系:R= ai-1, ai?D, ai-1ai ,i=2,3,n 基本操作P: HuffmanTree(); 构造函数 HuffmanTree(); 析构函数 Initialization(int WeightNum); 操作结果:构造哈夫曼树。 Encoder() 初始条件:哈夫曼树已存在或者哈夫曼树已存到文件中。 操作结果:对字符串进行编码 Decoder(); 初始条件:哈夫曼树已存在且已编码。 操作结果:对二进制串进行译码 Print() 初始条件:编码文件已存在。 操作结果:把已保存好的

8、编码文件显示在屏幕 TreePrinting() 初始条件:哈夫曼树已存在。 操作结果:将已在内存中的哈夫曼树以直观的方式显示在终端上 2.本程序包含三个模块: 1)主程序模块: void main() 初始化; do 接受命令; 处理命令; while(“命令”=”退出”) 2)、建树模块实现定义的抽象数据类型 3)、编/译码模块实现字符串的编/译码 各模块之间的调用关系如下: 主程序模块 建树模块 编/译码模块 三、详细设计 程序代码如下 / 程序名:HuffmanTree.h / 程序功能:哈夫曼树类的头文件(并用其来实现编/译码) / 作者:刘伟高 / 日期:2006.11.27 /

9、版本:1.0 /对应类实现文件: HuffmanTree.cpp /对应主程序文件: main.cpp #include #include #include using namespace std; struct HuffmanNode /定义哈夫曼树各结点 int weight; /存放结点的权值,假设只考虑处理权值为整数的情况 int parent; /记录结点父亲位置,-1表示为根结点,否则表示为非根结点 int lchild,rchild; /分别存放该结点的左、右孩子的所在单元的编号 ; class HuffmanTree /建立哈夫曼树类 private: HuffmanNode

10、*Node; /哈夫曼树中结点的存储结构 char *Info; /用来保存各字符信息 int LeafNum; /树中的叶子结点总数 public: HuffmanTree(); /构造函数 HuffmanTree(); /析构函数 void Initialization(int WeightNum); /初始化函数:根据WeightNum个权值建立一棵哈夫曼树 void Encoder(); /编码函数:利用构造好的哈夫曼树对字符进行编码 void Decoder(); /译码函数:对二进制串进行译码 void Print(); /印文件函数:把已保存好的编码文件显示在屏幕 void Tr

11、eePrinting(); /印哈夫曼树函数:将已在内存中的哈夫曼树以直观的方式显示在终端上 ; / 程序名:HuffmanTree.cpp / 程序功能:实现哈夫曼树类的源文件(并用其来实现编/译码) / 作者:刘伟高 / 日期:2006.11.27 / 版本:1.0 #includeHuffmanTree.h #include using namespace std; / / / 构造函数 / 函数功能:将结点指针初始化为NULL / 函数参数:无 / 参数返回值:无 HuffmanTree:HuffmanTree() Node=NULL; /将树结点初始化为空 Info=NULL; /将

12、字符数组初始化为空 LeafNum=0; /将叶子数初始化为0 / / / 析构函数 / 函数功能:将所有结点的空间释放 / 函数参数:无 / 参数返回值:无 HuffmanTree:HuffmanTree() delete Node; /释放结点空间 delete Info; /释放字符存储空间 / / / 初始化函数 / 函数功能:从终端读入字符集大小n,以及n个字符和n个权值, / 建立哈夫曼树,并将它存放在文件hfmTree中. / 函数参数:int WeightNum表示代码个数 / 参数返回值:无 void HuffmanTree:Initialization(int Weight

13、Num) /初始化 int i,j,pos1,pos2,max1,max2; / Node=new HuffmanNode2*WeightNum-1; /WeightNum权值对应的哈夫曼树中的结点总数为2*WeightNum-1个 Info=new char2*WeightNum-1; for(i=0;iWeightNum;i+) cout请输入第i+1个字符值; getchar(); /丢弃字符t与n Infoi=getchar(); /输入一个字符,主要是考虑输入空格而采用这种形式的 getchar(); coutNodei.weight; /输入权值 Nodei.parent=-1; /为根结点 Nodei.lchild=-1; /无左孩子 Nodei.rchild=-1; /无右孩子 for(i=WeightNum;i2*WeightNum-1;i+) /表示需做WeightNum-1次合并 pos1=-1; pos2=-1; /分别用来存放当前最小值和次小值的所在单元编号 max1=32767; /32767为整型数的最大值 max2=32767; /分别用来存放当前找到的最小值和次小值 for(j=0;ji;j+) /在跟节点中选出权值最小的两个 if(Nodej.parent=-1) /是否为根结点 if(Nodej.weightmax1) /是否比最小值

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

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