资源描述
实验3:霍夫曼编码学生姓名: 学 号:一、实验室名称:信息与编码课程组二、实验项目名称:霍夫曼编码三、实验原理:1)将个信源符号按概率大小递减排列;2)用“0,1”马符号分别代表概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一种,从而得到只涉及个符号的新信源,称为缩减信源;3)把缩减信源的符号仍按概率大小递减顺序排列,再将其最后两个概率最小的信源符号分别用“”和“1”码符号表达,并且合并成一种符号,这样又形成了个信源符号的缩减信源;4)依次继续下去,直至信源最后只剩余两个信源符号为止,将这最后两个信源符号分别用二元码符号“”和“”表达;)然后从最后级缩减信源开始,进行回溯,就得到各信源符号所相应的码符号序列,即相应的码字。四、实验目的:(1)进一步熟悉Huffman编码过程;(2)掌握C语言递归程序的设计和调试技术。以巩固课堂所学编码理论的知识。五、实验内容: 对于给定的信源,运用霍夫曼编码措施编出其中一种紧致码。六、实验器材(设备、元器件):PC机一台,装有V+60或其他C语言集成开发环境。七、实验环节及操作:)排序;2)缩减信源;3)递归调用霍夫曼算法得到相应的码字。八、实验数据及成果分析: 题目:已知信源:,给出其中一种霍夫曼码,并求其平均码长和编码效率。 include stdh#clude stdlib.inlude fla#nclude dein n#deine m 2ntpedef strctfloat weght;nt lhild,rhild,parent;Node;ef HTNodHuffmanTre;d IntffanTr(Hufmnre T)or(in i = 0;i m;i+)i.ild= Ti.rhil = Ti.ret ;Ti.eight= 0.0;void InuWeiht(HffmaTeeT)flt tpn= .0,0.1,.17,0.5,.15,0.05,.0,0.05;for(inti = 0;i ;+).weigh= tmpi;d SelecMin(fmnTe T,i i,inp1,int *p2)int j;*p p2 = m-1;m-wight= FL_AX;for(j = 0;j = i;j+)i(Tj.arent !=-1)connue;f(Tj.wght T1.weight)p = *p1;*p1 = ;se f(Tj.eigh Tp2.weght)*p2 =j;d CreteufmnTre(HuffmnTe T)it i,p1,p;InHuffanree(T);nputWeight();or(i n; ;+)eletMin(T,i-,1,&p);Tp1paren = Tpparen i;Ti.lcild p;Tichil = p2;i.weigh = Tp1.eigh+T2.egh;t riHuffmanCode(HfanTree,int i)prntf(s%f,+1,i.weigt);it arrn-1,cont0,j;ile(Ti.parent != -1)arcont+ = TTipent.lchil = i?0:; = T.parent;fo(j= cou1;j = ;j-)prn(d,rj);pinf();rern count;tmain()fmanTree T;CreatHfmaTee();float av 0;fr(t i= ;i n;i+)ave += Tit*PrintHuffmanCod(T,i);intf(平均码长:t%,ave);pinf(编码效率:t%f%n,ae/cl(log(oue)n)log(ouble)2)*10);systm(paus);九、实验结论:十、总结及心得体会: 本实验让我学习了使用 进行编程的措施,并对 的知识有了进一步理解。十一、对本实验过程及措施、手段的改善建议: 报告评分: 指引教师签字:
展开阅读全文