


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验1哈夫曼编码实验目的掌握哈夫曼编码原理,掌握哈夫曼树的生成方法。了解数据压缩。实验要求实现哈夫曼编解码生成算法。3、实验内容首先统计要压缩的文件中出现的字符和字母的数量,根据字符字母和空格的概率进行编码,然后读取要编码的文件并存储到另一个文件中;然后调出编码的文件,解码输出,最后存储到另一个文件中。5、实验原理1,哈夫曼树的定义:假设有n个权值,试着构造一个有n个叶子节点的二叉树,每个有权的叶子都是wi,其中权值路径最小的二叉树成为Huffman树或最优二叉树;2、Huffman树的构造:权值为输入频率数组,并且这些值在node对象中按data属性依次分配给HT,即每个HT节点对应一个输入频率。然后,根据数据属性,从最小值到最大值取两个最小值和这个小的HT节点,将它们的数据相加,构造一个新的htnode作为它们的父节点。指针parentleftchild,rightchild被分配了相应的值。将这个新节点插入最小堆。按照这个步骤,我们可以建造一棵树吗?通过构造的树,从下至上,从频率节点开始搜索父节点,直到父节点是树的顶点。这样,每次向上搜索后,根据原始节点是父节点的左子节点还是右子节点来记录I或0。这样,每个频率都有一个唯一对应的01码,任何没有前端的码都和其他完整码一样。初始化,以文本文件中的字符数为权值,生成Huffman树,按符号概率由大到小对符号进行排序,概率最小的两个符号形成一个节点。重复步骤()(),直到概率和为1,从根节点到每个符号对应的〃叶〃,概率高的符号标为,概率低的符号从根节点开始,对符号7进行编码。实验程序Sinclude<iostream>coinclude<iomanip>o:)include<iomanip>使用命名空间STD;typedefstruct〃节点结构{chardata;〃记录字符值longintweight;〃记录字符权重unsignedintparent,Ichild,rchild;}Htnode,*HuffmanTree;typedefchar**huffmancode;//dynamiclyallocatearraytostoreHuffmancodetablevoidselect(HuffmanTree&HT,inti,int&Sl,int&S2)〃选择HT[1中权重最小且父节点不为。的两个节点。。。T],它们的序列号是S1和S2{S1=O;S2=0;intNl=30000,N2=30000;for(intk=l;k<=l;k++){if(HT[k]\父项=0{if(HT[k])o重量<N1){N2=N1;Nl=HT[k]o重量;S2=S1;Sl=k;}否则(HT[k]o重量<N2){N2=HT[k]oWeight;S2=k;}}}}}voidhuffmancoding(HuffmanTree&HT,huffmancode&HCzintn)〃将要编码的字符串保存到空树中{ifstreamfinl(〃子夫txt〃);ifstreamfin2("重量.txt");if(n<=l)返回;intm=2*n-l;inti;HT=newhtnode[m+l];char*Zifu;int*weight;weight=newchar[n+l];weight=Newlnt[n+l];for(1=1;l<=n;I++I++)〃将要编码的字符放入Zifu数组,{charch;ch=ch=finl.get();Zifu[l]=ch=ch=finl.get();Zifu[l]=ch;}for(1=1;l<=n;I++)〃/将编码字符对应的权重放入权重数组{fin2»weight[l];}for(l=l=l»weight[l];}{l=n=l=n(l=n=l+);l=n=。数据=Zifu[i];HT[i]o(i=n+l;i<=m;i++++++(i=i=n+l;i<=m;i++){HT[i].数据='@';}为(i=l;i<=m;i++){HT[i].父母=HT[i[i].lchild=HT[i[i].lchild=HT[i].rchild=O;}为(i=n+l;i<=m;m;++i){intsi,s2;选择(HT,i-1,sl,s2附选择(HTj-1花);HT[sl]父母=i;HT[s2]父母=i[s2]父母=i;H[i[i[i[i]H[i]LCHIL[=s2;HT[i].Weight=HT[sl].Weight+HT[s2].Weight;}HC=(HuffmanCode)malloc((n+1)*sizeof(char*);打开工作区进行编码:char*CD;CD=(char*)malloc(n*sizeof(char));〃打开工作区存储权重:CD[n-l]='\0,;for(1=1;l<=n;I++){intstart=n-l;intc,f;for(c=l,f=HT[l]o家长;F!=0;C=fzf=HT[f]oParent)〃从叶到根的反向编码{if(HT[f[
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年二手车评估师考试准备资料与答案
- 2024年小自考公共事业管理应试技巧及答案
- 2024年古代文学史论点探讨试题及答案
- 无领导讨论组试题及答案
- 2024年新兴汽车产业对维修工的影响试题及答案
- 2024年汽车维修工考试应试策略试题及答案
- 透视古代文学史考试重要性试题及答案
- 2024年省考二手车售前检查标准试题及答案
- 小学语文一年级考试的练习试题及答案
- 2024年汽车维修工考试实战演练指导试题及答案
- 钢板桩支护施工方案完整版
- 机器学习 试卷2套
- IATF16949-2024 内部审核方案
- 食品安全日管控、周排查及月调度记录表
- CJT 186-2018 地漏 标准规范
- 商务英语综合教程4-Unit1
- 装配式混凝土建筑预制叠合板、叠合梁识图
- 小学三年发展规划(2024-2026)
- 2024届江苏省南京市、盐城市高三第二次模拟考试英语试题二次开发字词积累导学案
- 2010年10月自考00567马列文论选读试题及答案含解析
- 生理学全套课件
评论
0/150
提交评论