文档详情

哈夫曼编译码器实验报告.doc

发布:2017-02-12约1.57万字共19页下载文档
文本预览下载声明
实验五 哈夫曼编/译码器 学院: 工学院 系: 计算机系 专业: 计算机科学与技术 年级: 姓名:学号:实验时间: 2011-5-19 需求分析 1.问题描述 用huffman编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。是为着这样的信息收发站写一个huffman编/译码系统。 2.基本要求 该系统应具有以下功能: I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存进文件hfmTree中。 E:编码(Encoding)。利用建好的哈夫曼树(如不在内存中,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 D:译码(Decoding)。(利用已经建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。 T:印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrin中。 3.测试数据 (1)利用下面这道题中的数据调试程序。 某系统在通信联络中只可能出现八种字符,其概率分别为0.25,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。 (2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROMGRAM 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 二.概要设计 本程序的数据类型定义为 typedef struct{ unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char** HuffmanCode; 所实现的功能函数如下 void initHuffmanTree();//选择初始化哈夫曼树的方式 int openfileInit();//通过打开的data.txt文件初始化哈夫曼树 该文件是为了测试数据2 包涵26个字符 int inputInit();//通过手动输入字符初始化哈夫曼树 int HuffmanCoding(int *w); //初始化哈夫曼数,按照哈夫曼规则建立二叉树。此函数块调用了Select()函数。 void Select(int j,int s1,int s2); //选择parent为0,且weight最小的两个节点 序号为s1,s2 void encoding();//选择哈夫曼编码方式 void openfileEnco();//通过打开文件encode.txt的方式进行编码 void inputEnco();//通过手动输入的方式进行编码 void decode();//选择译码方式 void openfileDeco();//通过打开文件CodeFile.txt的方式进行译码 void inputDeco();//通过手动输入的方式进行译码 void dispHT( HuffmanTree nodeRoot, int level ); //以缩进方式输出哈夫曼树直观图 主函数 主函数主要设计的是一个分支语句,让用户挑选所实现的功能。 如图所示: 三.详细设计 #includeiostream #includefstream #includecstring using namespace std; ofstream outstuf; typedef struct{ unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char** HuffmanCo
显示全部
相似文档