- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
huffman无损压缩编码实验报告
无损压缩编码
(huffman编码)实验报告
作 者: 计一飞 学 号: 100座机电话号码 学院 系 : 电子工程与光电技术学院 专 业: 电子信息工程 题 目: 无损压缩编码 指导老师: 康其桔 摘要
本文介绍了无损压缩编码中的霍夫曼(huffman)编码。Huffman编码是可变字长编码的一种,该方法完全依据字符出现概率来构造最优二叉树(huffman树),故有时又称为最佳编码。在文中,我们使用C++语言进行编码,从下到上进行了熵编码。
关键词:huffman、最优二叉树、熵编码、C++
Abstract
The huffman Huffman coding of Lossless coding were introduced in this paper . Huffman coding is a kind of variable-word- length coding.The method is completely based on the characters appear probability to construct the optimal binary tree Huffman tree , so it is sometimes referred to as the optimal coding. In this paper, we use c + + language to code, from bottom to top in the entropy coding.
Key words: huffman、optimal binary tree、entropy coding、C++
实验目的
理解无损压缩编码的优点和意义。
理解树、二叉树、huffman树的概念。
学会二叉树的C++编程,进行熵编码。
实验步骤
步骤①:按照符号出现概率大小的顺序对符号进行排序。
步骤②:把概率最小的两个符号组成一个节点P1。
步骤③:重复步骤②,得到节点P2,P3,P4,……,PN,形成一棵树,其中的PN称为根节点。
步骤④:从根节点PN开始到每个符号的树叶,从上到下标上0 上枝 和1 下枝 ,至于哪个为1哪个为0则无关紧要,但通常把概率大的标成1,概率小的标成0。
步骤⑤:从根节点PN开始顺着树枝到每个叶子分别写出每个符号的代码。
实验程序设计
输入字符,定义三个字符串,输入字符串到words数组,并且求得其长度length。
char words[500],wds[500],wd[500]; //定义三个字符串,长度都不超过500
cin words; //输入字符串
int length,len,m; length strlen words ; //计算words字符串长度
对words字符串进行从小到大冒泡排序,并且将words中的元素全部赋给wds字符串。
void maopao char wd[],int len //函数冒泡排序 int i,j; char t; for j 0;j len-1-1;j++ for i 0;i len-j-1;i++ if wd[i] wd[i+1] t wd[i]; wd[i] wd[i+1]; wd[i+1] t; 主函数:
maopao words,length ; //定义冒泡函数
cout words '\n';
for int i 0;i length;i++ //将words中的内容赋给wds wds[i] words[i]; 将已经排序好的字符串中同种字符删除,使该字符在字符串中只剩下一个。得到wds的字符串长度len。
void typedelete char *a1,int len //删除字符串中的同类字符使该字符只剩一个 while *a1 if *a1 * a1+1 strcpy a1,a1+1 ; continue; a1++; 主函数:
typedelete wds,length ; //定义同类删除函数
cout wds '\n'; //输出排序好且一组相异的字符串wds
len strlen wds ; //字符串wds的长度
4、定义两个数组entr1、entr2,分别用于存放输入字符串words中出现每个字符的频率与频数。定义log2函数用于计算熵。
double log2 double x //定义log2函数计算熵值 double y; y log10 x /log10 2 ; return y; 主函数:
double entr1[500] 0,0,0 ; //定义一个数组,存放每个字母出现的频率
int entr2[500] 0,0,0 ; //定义一个数组,存放每个字母出现的频数
文档评论(0)