欢迎来到天天文库
浏览记录
ID:22302581
大小:112.73 KB
页数:8页
时间:2018-10-28
《无损数据压缩实验报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、多媒体技术基础实验报告院系:自动化学院班级:11102003姓名:胡嘉懿学号:1110200302•实验名称:无损压缩编码实验•实验内容:任选一种无损编码方式,通过C++编程实现。•实验要求:1)字符屯的输入是手工输入的;2)通过程序实现编码,敁终在屏幕上显示编码结果,例如,如果选川huffman编码,则要显示字符串的编码以及乎均码长;3)毎人交一份实验报吿电子版,以学号作为文件夾的名称,其中包括源程序。•算法思想按输入字符Ascii码值递增的顺序生成Hash表,并进行权重统计;将Hash表中元素生成为Huffman树■叶子节点;对于所有无父的节点进行搜
2、索,将次小和最小的节点作为子节点创建父节点(规定最小的总是右子节点,并总是标记为1);直到从剩下一个没柯父节点的根节点;对huffman树进行编码,采川递归的方法进行扫描,同吋计算码长;最后将叶子节点数据写冋Hash表;川Hash表的编码数据对原数据进行编码;统计各叶子节点的码长來进行〒均码长的计算。Hash数组为一个长为128(ASCii)的数组,每个元素存储对应字符出现的频率和编码素结构:统计权重对J、V:编码编码长度Huffman数组是一个按照节点创建顺序构造的数组元素结构:对应Ascii码,对于父节点,定为-1权重父节点位置所在子树标识(规定0为
3、左子树,1为右子树)节点编码(为了显示方便使用字符串)编码长度哈夫玆码的编码性能与其包含字符种类的多少有较人关系,对于最坏情况,即-个包含全部Ascii字符,每个字符只!li现一次的文本,算法本身性能最低。•源程序^include^include〈string,h〉#definefileLenth5000typedefstruct{intvalue;charcodc[512];intcodeLen;}hashElement;typedefstruct{intascNum;intvalue;intfPoint:intlFlag;ch
4、arcode[512];intcodeLen;}huffElement;charsources[fileLenth];hashElementhashArray[128];huffElementhuffTree[512];inthuffTreeNum=0;inthuffTreeLeafNunFO;intwholeValue=0;intsumCodeLen二0;voidinitALLO{inti;for(i=0;i<256;i++){hashArray[iLvalue-0;strcpy(hashArray[i].code,;hashArray[i].code
5、Len=-l;}for(i=0;i<512;i++){huffTree「i].ascNum='l;huffTree[i].value=0;huffTree[i].fPoint=-l:huffTree[i].lFlag=-l;strcpy(huffTree[i].code,huffTree[iLcodeLen=-l;inthuffTreeEncode(inthuffTreeP){intFP;if(huffTree[huffTreeP].fPoint==-l){huffTreeThuffTreePl.codeLen=0;returnhuffTreeP;}if
6、(huffTree[huffTreeP].codeLen!=-1)returnhuffTreeP;else{FP=huffTreeEncode(huffTree[huffTreeP].fPoint);strcpy(huffTree[huffTreeP].code,huffTree[FP].code);if(huffTree[huffTreePJ.lFlag--0)streat(huffTreeLhuffTreeP].code,〃0〃);elseif(huffTree[huffTreeP].lFlag==l)streat(huffTree[huffTree
7、P].code,〃1〃);huffTree[huffTreeP].codeLen=huffTree[I?P].codeLen+1;returnhuffTreeP;}}intniainO{inti;introotElag-0;intexMinium=-l;intMiniumV=fi1eLenth+1,exMiniumV=fileLenth+1;c0Ut〈〈"请输入任意字符串"<〈’’;cin.get1ine(sourceS,5000);initALLO:for(i~0;i8、]].valuc++;}for(i=0;i<256;i++){if(hashAr
8、]].valuc++;}for(i=0;i<256;i++){if(hashAr
此文档下载收益归作者所有