下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验四哈夫曼树编码一、实验目的1、掌握哈夫曼树的一般算法;2、掌握用哈夫曼树对字符串进行编码;3、掌握通过哈夫曼树对字符编码进行译码得过程。二、实验基本要求1、设计数据结构;2、设计编码算法;3、分析时间复杂度和空间复杂度三、程序实现此程序中包含六个函数:Select()、HuffmanTree()、BianMa()、BianMa2()、YiMa()、Sum(),其功能及实现过程如下:#includestructelement/哈夫曼树结点类型intweight;intlchild,rchild,parent;structChar/字符编码表信息charnode;intweight;charc
2、ode20;voidSelect(elementhT,int&il,int&i2,intk)在hT中查找最小值及次小值intminl=9999,min2=9999;il=i2=0;for(inti=0;ik;i+)if(hTi.parent=-l)if(hTi.weightminl)min2=minl;i2=il;minl=hTi.weight;il=i;elseif(hTi.weightmin2)min2=hTi.weight;i2=i;voidHuffmanTree(elementhuffTree,Charzifuma,intn)/构建哈夫曼树inti,k,i1,i2;for(i=0;i2
3、*n-1;i+)/初始化huffTreei.parent=-1;huffTreei.lchild=-1;huffTreei.rchild=-1;for(i=0;in;i+)/构造n棵只含有根结点的二叉树huffTreei.weight=zifumai.weight;for(k=n;k2*n-1;k+)/n-1次合并Select(huffTree,i1,i2,k);/在huffTree中找权值最小的两个结点i1和i2huffTreei1.parent=k;/将i1和i2合并,则i1和i2的双亲是khuffTreei2.parent=k;huffTreek.weight=huffTreei1.we
4、ight+huffTreei2.weight;huffTreek.lchild=i1;huffTreek.rchild=i2;voidBianMa(elementhuffTree,Charzifuma,intn)根据哈夫曼树编码inti,m,k,j,l;chartemp20;if(n=1)zifuma0.code0=0;zifuma0.code1=0;elsefor(i=0;in;i+)j=0;k=huffTreei.parent;l=i;while(k!=-1)if(huffTreek.lchild=l)tempj+=0;elsetempj+=1;l=k;k=huffTreek.parent
5、;k=j-1;for(m=0;mj;m+)zifumai.codem=tempk-;zifumai.codem=0;voidBianMa2(Charzifuma,charzifu,charbianma,intn)根据编码表对字符串编码inti,j,k,m;i=k=0;while(zifui)for(j=0;jn;j+)if(zifui=zifumaj.node)m=0;while(zifumaj.codem)bianmak+=zifumaj.codem+;i+;bianmak=0;voidYiMa(elementhuffTree,Charzifuma,charbianma,charyima,i
6、ntn)根据编号的码元译成字符串inti,j,k;i=j=0;if(n=1)while(bianmai+)yimaj+=zifuma0.node;elsewhile(bianmai)k=2*(n-1);while(!(huffTreek.lchild=-1&huffTreek.rchild=-1)if(bianmai+=0)k=huffTreek.lchild;elsek=huffTreek.rchild;yimaj+=zifumak.node;yimaj=0;voidSum(charzifu,Charbianma,int&n)计算字符串中字符种类的个数及其出现次数inti,j;i=j=0;w
7、hile(zifui)for(intk=0;kj;k+)if(bianmak.node=zifui)bianmak.weight+;break;if(k=j)bianmaj.node=zifui;bianmaj+.weight=1;i+;n=j;voidmain()intn,i;chara50,b200,c50;elementhuffTree100;Charw50;coutvv请输入需要编码的字符串:n;cin.getline(a,49);Sum(a,w,n);coutvv该字符串中共有vvnvv类字符。其表示及出现频率分别为:n;coutvv字符t频率n;for(i=0;ivn;i+)cou
8、tvvwi.nodevvtvvwi.weightvvn;HuffmanTree(huffTree,w,n);coutvv哈夫曼树结点排列为:n;coutvvnumtweighttparenttlchildtrchildn;for(i=0;iv2*n-1;i+)coutvvivvtvvhuffTreei.weightvvt;coutvvhuffTreei.parentvvtvvhuffTreei.lchildvvtvvhuffTreei.rchildvvn;coutvv该字符的编码表为:n;BianMa(huffTree,w,n);coutvvnodetweighttcoden;for(i=0;
9、ivn;i+)coutwi.nodetwi.weightt;intj=0;while(wi.codej)coutwi.codej+;coutn;BianMa2(w,a,b,n);coutvv该字符串编码后为:n;coutbendl;YiMa(huffTree,w,b,c,n);coutvv该字符串经编码后译码得:n;coutcendl;四、运行结果假设输入的一串字符串为:abcbcaddabbacda则编译后它的编码为:111000100011010111101011000111根据它的编码译码结果为:abcbcaddabbacda晴输入需要编码的字符串:DDiello该字符串匸了共有4娄字符.匡表尹政已现顷率分别询:字符我e112p1旳夫曼树结点排列为:riniTiweightparenCLuhildrLliild014-1一丄114-1一丄”z5-1-1315-1-14269q19pJ65C-1J45叵字符的编怕袤为:nodewbiglitcodeli160e1011211p1IS陆字符弗编阳后为,0001111113陰宁符串经编码万译码-争htlluPressanykeytocontinue
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工伤保险相关法律法规、司法解释及案例汇编(2026+版)
- 2026年山东省邹城市高考历史模拟卷及答案参考
- 2026 山东事业编市场监管岗含答案
- 2026 湖南 水利岗事业单位易错点巩固训练卷含解析
- 高中地理教资面试地图专项及答案
- 2026下半年小学美术教资面试色彩理论题库及解析
- 2026年保健按摩师职业技能等级认定操作技能历年真题
- 2026年七年级下册地理认识亚洲
- 2025年河北省深州市高二历史上册期末考试测试卷及参考答案【完整版】
- 2025年山东省禹城市高二生物上册期末考试考试卷【考点提分】附答案
- 2026年道路客运汽车驾驶员职业技能等级认定(三级)操作技能试题
- 2026年安徽省中考英语真题试卷及答案
- 内支撑设计计算书(Excel自动计算版)
- 六年级上册语文1-8单元基础默写通关练习卷
- 2026年安徽省基层法律工作试题(附答案)
- 2026年福建厦门大学附属第一医院海沧院区(厦门市肿瘤医院)辅助岗位招聘8人笔试备考试题及答案详解
- 2025-2026学年江苏省苏州市高新区苏州实验中学高二上学期10月月考数学试卷(含答案)
- 煤矿井下无轨胶轮车安全管理培训
- 慢性肾脏病基层诊疗管理指南(2025版)
- (正式版)DB11∕T 354-2023 《生活垃圾收集运输管理规范》
- 14.1 全等三角形及其性质 课件(共33张)-人教版(2024)数学八年级上册
评论
0/150
提交评论