无损数据压缩实验报告.doc多媒体技术基础实验报告院系:自动化学院班级:11102003姓名:胡嘉懿学号:1110200302•实验名称:无损压缩编码实验•实验内容:任选一种无损编码方式,通过C++编程实现。•实验要求:1) 字符屯的输入是手工输入的;2) 通过程序实现编码,敁终在屏幕上显示编码结果,例如,如果选川huffman编码,则要显示字符串的编码以及乎均码长;3) 毎人交一份实验报吿电子版,以学号作为文件夾的名称,其中包括源程序。•算法思想按输入字符Ascii码值递增的顺序生成Hash表,并进行权重统计;将Hash表中元素生成为Huffman树■叶子节点;对于所有无父的节点进行搜索,将次小和最小的节点作为子节点创建父节点(规定最小的总是右子节点,并总是标记为1);直到从剩下一个没柯父节点的根节点;对huffman树进行编码,采川递归的方法进行扫描,同吋计算码长;最后将叶子节点数据写冋Hash表;川Hash表的编码数据对原数据进行编码;统计各叶子节点的码长來进行〒均码长的计算。Hash数组为一个长为128(ASCii)的数组,每个元素存储对应字符出现的频率和编码素结构:统计权重对J、V:编码编码长度Huffman数组是一个按照节点创建顺序构造的数组元素结构:对应Ascii码,对于父节点,定为-1权重父节点位置所在子树标识(规定0为左子树,1为右子树)节点编码(为了显示方便使用字符串)编码长度哈夫玆码的编码性能与其包含字符种类的多少有较人关系,对于最坏情况,即-个包含全部Ascii字符,每个字符只!li现一次的文本,算法本身性能最低。•源程序^include<>^include〈string,h〉#definefileLenth5000typedefstruct{intvalue;charcodc[512];intcodeLen;}hashElement;typedefstruct{um;intvalue;intfPoint:intlFlag;charcode[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].codeLen=-l;}for(i=0;i<512;i++){huffTree「i].um='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){=0;returnhuffTreeP;}if(huffTr
无损数据压缩实验报告 来自淘豆网www.taodocs.com转载请标明出处.