哈夫曼编码译码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈夫曼编码/译码

一、【实验内容】

【问题描述】

利用哈夫曼编码进行住处通讯可以大大提高信道利用率,缩短住处传输时间,降低成本,但是,这要求在发送端通过一个编码系统将传输的数据预先编码,在接收端通过一个译码系统对传来的数据进行译码(复原),对于双向传输信息的信道,每端都一个完整的编码译码系统,试为这样的住处收发站写一个哈夫曼友的编码译码系统.

【基本要求】:一个完整的系统应以下功能:

(1) I. 初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存放在文件hfmTree中. (2) E. 编码(Encoding)。利用已建立好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果代码存(传输)到文件CodeFile中.

(3) D. 译码(Decoding)。利用已建好的哈夫曼树,对传输到达的Cod eFile中的数据代码进行译码,将译码结果存入文件TextFile中. (4) P. 印文件代码(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePri n中。

(5) T. 印哈夫曼树(TreePrinting)。将已在内存中的哈夫曼树以直观的方式(树或凹入表的形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件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 1

6 1

二、实验目的

树型结构是一种应用极为广泛的非线性数据结构,也是本课程的重点内容,哈夫曼树(最优二叉树)是树型结构的典型应用,本次实验突出了数据结构加操作的程序设计观点,希望能根据树型结构的非线性特点,熟悉各种存储结构的特性,达到如何应用树型结构的非线性特点,熟悉各种存储结构的特性,达到如何应用树型结构解决具体问题的目的.

三、实验文档:

哈夫曼编码/译码

一、需求分析

1、利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时

间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(既可以双向传输信息的信道),每端都需要一个完整的编/译码系统。本次设计就是为这样的信息收发站写的一个哈夫曼的编/译码器。

本实验要求:

2、本演示程序中,用户可以输入键盘中的任意字符,长度为任意长,字符输入顺序不限,且允许出现重码

3、演示程序以用户与计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据(可虑去输入中的非法字符)和运算结果显示在其后。

4、本演示程序中,当用户选择的功能错误时,系统会输出相应的提示。

5、在本系统中,用户可以对任意长的字符串可进行编码/译码。

6、程序执行的命令包括:

1) 初始化(I)2) 编码(E)3) 译码(D)

4) 印代码文件(P)5) 印哈夫曼树(T)6) 退出(Q)

7、测试数据:

(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 3

2 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 HuffmanTree{

数据对象:D={ai| ai∈CharSet,i=1,2,……,n,n≥0}

数据关系:R={< ai-1, ai > ai-1, ai∈D, ai-1

基本操作P:

HuffmanTree(); 构造函数

~ HuffmanTree(); 析构函数

Initialization(int WeightNum);

操作结果:构造哈夫曼树。

Encoder()

初始条件:哈夫曼树已存在或者哈夫曼树已存到文件中。

操作结果:对字符串进行编码

Decoder();

初始条件:哈夫曼树已存在且已编码。

操作结果:对二进制串进行译码

Print()

初始条件:编码文件已存在。

操作结果:把已保存好的编码文件显示在屏幕

TreePrinting()

初始条件:哈夫曼树已存在。

操作结果:将已在内存中的哈夫曼树以直观的方式显示在终端上2.本程序包含三个模块:

1)主程序模块:

void main(){

初始化;

do{

接受命令;

处理命令;

}while(“命令”=”退出”)

}

2)、建树模块——实现定义的抽象数据类型

相关文档
最新文档