欢迎来到天天文库
浏览记录
ID:30242598
大小:520.50 KB
页数:23页
时间:2018-12-28
《哈夫曼编码与译码(附源码)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案建立Huffman树进行编码和译码的设计郝萌1100300423哈尔滨工业大学计算机科学与技术学院1003104班摘要:建立一个简易的系统,对于给定的一篇英文文章,统计字符出现的概率,并根据概率建立Huffman树,利用Huffman编码对文章进行编码和译码。掌握Huffman树的建立与应用,并进一步熟练掌握程序的设计流程。关键词:Huffman树Huffman编码文章译码文件压缩解压缩1.引言:给定一篇文章,统计字符出现的概率,根据概率建立哈夫曼树,并进行哈夫曼编码,进而可以利用哈夫曼编码对文章进行编码与译码和文件压缩、解压缩等操作。2.程序设计流程(1)文字表述
2、精彩文档实用标准文案开始进入功能选择界面,包含五种操作:1.读取文章并对字符编码,2.哈夫曼编码信息,3.文章编码,4.文章译码,5.文件压缩,6.文件解压缩,7.退出程序。操作1:给定一篇文章,统计字符出现的概率,并根据概率建立Huffman树,并利用Huffman树对字符进行Huffman编码。操作2:显示Huffman编码信息,包括字符,字符出现的概率,Huffman编码。操作3:对文章进行译码,显示译码信息,并保存。操作4:对文章进行译码,显示并保存。操作5:对文件进行压缩,每7位二进制序列对应一个ASCII码。操作6:对文件进行解压缩。(2)流程图精彩文档实用标准文案
3、(2)程序数据要求及功能实现主界面1.读取文件并对字符进行编码2.哈夫曼编码信息精彩文档实用标准文案3.文件编码精彩文档实用标准文案(1)显示文件编码(2)保存文件编码4.文件译码精彩文档实用标准文案(1)显示文章编码的译码(2)保存文章编码的译码5.文件压缩精彩文档实用标准文案5.文件解压缩附:程序源代码/**File:HUFFMANFUNCTION.h*Author:Administrator**Createdon2011年12月19日,下午6:19*/#ifndefHUFFMANFUNCTION_H#defineHUFFMANFUNCTION_H精彩文档实用标准文案#in
4、clude#include#include#include#definemax1150#definemax250#definemax3256usingnamespacestd;classHtnote{public:charname;//字符名doubleweight;//权重intlchild;//左孩子intrchild;//右孩子intparent;//父亲Htnote(){weight=0;lchild=-1;parent=-1;rchild=-1;}};className{public:intnum
5、;//字符出现的次数charpname;//字符名doublelweight;//权值Name(){num=0;lweight=0;}};classGetName{public:charnamef[max2];intn;//字符的种类intsum;//字符的总数Nameletter[max1];//存储字符信息的类的数组精彩文档实用标准文案GetName(){sum=0;n=0;}voidGetWeight()//得到字符的权值{for(inti=0;i6、到权值}}intReadLetter(){ifstreaminput;cout<<"请输入文件名:"<>namef;input.open(namef);//打开文件if(input.fail()){cout<<"该文件不存在!"<7、].pname==ch){letter[i].num++;sum++;tag=1;}}if(tag==0){n++;letter[n].pname=ch;letter[n].num++;sum++;}}sum--;精彩文档实用标准文案input.close();GetWeight();//得到字符权值}};classCodeNode//编码类{public:charch;//存储字符charbits[max1];//存储编码};classFunction{public:GetNameL;in
6、到权值}}intReadLetter(){ifstreaminput;cout<<"请输入文件名:"<>namef;input.open(namef);//打开文件if(input.fail()){cout<<"该文件不存在!"<7、].pname==ch){letter[i].num++;sum++;tag=1;}}if(tag==0){n++;letter[n].pname=ch;letter[n].num++;sum++;}}sum--;精彩文档实用标准文案input.close();GetWeight();//得到字符权值}};classCodeNode//编码类{public:charch;//存储字符charbits[max1];//存储编码};classFunction{public:GetNameL;in
7、].pname==ch){letter[i].num++;sum++;tag=1;}}if(tag==0){n++;letter[n].pname=ch;letter[n].num++;sum++;}}sum--;精彩文档实用标准文案input.close();GetWeight();//得到字符权值}};classCodeNode//编码类{public:charch;//存储字符charbits[max1];//存储编码};classFunction{public:GetNameL;in
此文档下载收益归作者所有