哈夫曼编码实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1哈夫曼编码实验的目的是掌握哈夫曼编码的原理和生成哈夫曼树的方法。了解数据压缩。实验要求实现Huffman编解码器生成算法。三个。实验内容首先统计待压缩文件中出现的字符和字母的数量,根据字符字母和空格的概率进行编码,然后读取要编码的文件并将其存储在另一个文件中;然后调用编码文件,对输出进行解码,最后存储到另一个文件中。5实验原理1。假设树的权重是用huffn树的定义构造的。每个加权叶为wi,权值路径最小的二叉树成为Huffman树或最优二叉树。哈夫曼树的结构:权重是一个输入频率的数组。这些值根据节点对象中的数据属性按顺序分配给HTs,即每个HT节点对应一个输入频率。然后,根据数据属性,从最小值到最大值取两个最小值和这个小HT节点,将它们的数据相加,构造一个新的htnode作为它们的父节点。指针parentleftchild和rightchild被分配了相应的值。将这个新节点插入最小堆。按照这个程序,我们能建一棵树吗?通过构造树,从下至上搜索父节点,直到父节点成为树的顶点。这样,每次向上搜索后,根据原始节点是父节点的左子节点还是右子节点记录1或0。每个01都有一个完整的代码,每个01都有一个完整的代码。初始化时,以文本文件中的字符数为权值生成Huffman树,按符号概率由大到小对符号进行
排序,概率最小的两个符号形成一个节点。重复步骤()(),直到概率和为1,从根节点到每个符号对应的“叶”,概率高的符号标为“0”,概率低的符号从根节点开始,对符号7进行编码。实验程序ා include 码的字符放入Zifu数组,{char ch;ch=ch=fin1.get();Zifu[I]=ch=ch=fin1.get();Zifu[I]=ch;}for (I=1;I<=n;I++)///将编码字符对应的权重放入权重数组{fin2>>weight[I];}for (I=I=I>>weight[I];}{I=n=I=n(I=n=I+);I=n=。数据=Zifu[i];HT[i]。(i=n+1;i<=m;i++++++(i=i=n+1;i<=m;i++){HT[i].数据='@';}为(i=1;i<=m;i++){HT[i].父母=HT[i[i].lchild=HT[i[i].lchild=HT[i].rchild=0;}为(i=n+1;i<=m;m;++i){int s1,s2;选择(HT,i-1,s1,s2)的选择(HT,i-1,s1,s2);HT[s1]父母=i;HT[s2]父母=i[s2]父母=i;H[i[i[i[i]H[i]LCHIL[=s2;HT[i].Weight=HT[s1].Weight+HT[s2].Weight;}HC=(HuffmanCode)malloc((n+1)*sizeof(char*);打开工作区进行编码:char*CD;CD=(char*)malloc(n*sizeof(char));//打开工作区存储权重:CD[n-1]='\0';for(I=1;I<=n;I++){int start=n-1;int c,f;for(c=I,f=HT[I]。家长;F!=0;C=f,f=HT[f]。Parent)//从叶到根的反向编码{if(HT[f[f]lchilld==C)CD[--Start]=<0';;;(I=1;I<=n;I++){int Start=n-1;I=(I=1;I<=n;I++){int Start=n-1;I=n[//如果左键为子级