实验3哈夫曼编码.docx

上传人:牧羊曲112 文档编号:3435937 上传时间:2023-03-13 格式:DOCX 页数:4 大小:37.95KB
返回 下载 相关 举报
实验3哈夫曼编码.docx_第1页
第1页 / 共4页
实验3哈夫曼编码.docx_第2页
第2页 / 共4页
实验3哈夫曼编码.docx_第3页
第3页 / 共4页
实验3哈夫曼编码.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《实验3哈夫曼编码.docx》由会员分享,可在线阅读,更多相关《实验3哈夫曼编码.docx(4页珍藏版)》请在三一办公上搜索。

1、实验3哈夫曼编码实验3:霍夫曼编码 学生姓名: 学 号: 一、实验室名称:信息与编码课程组 二、实验项目名称:霍夫曼编码 三、实验原理: 1)将q个信源符号按概率大小递减排列p(s1)p(s2)Lp(sq); 2)用“0,1”马符号分别代表概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一个,从而得到只包含q-1个符号的新信源,称为缩减信源S1; 3)把缩减信源S1的符号仍按概率大小递减次序排列,再将其最后两个概率最小的信源符号分别用“0”和“1”码符号表示,并且合并成一个符号,这样又形成了q-2个信源符号的缩减信源S2; 4)依次继续下去,直至信源最后只剩下两个信源符号为止,将这最

2、后两个信源符号分别用二元码符号“0”和“1”表示; 5)然后从最后级缩减信源开始,进行回溯,就得到各信源符号所对应的码符号序列,即相应的码字。 四、实验目的: (1)进一步熟悉Huffman编码过程;(2)掌握C语言递归程序的设计和调试技术。以巩固课堂所学编码理论的知识。 五、实验内容: s2,L,sqSs1,= 对于给定的信源利用霍夫曼编码方法编出其中一种紧致P,p(s1),p(s2),L,p(sq)码。 六、实验器材: PC机一台,装有VC+6.0或其它C语言集成开发环境。 七、实验步骤及操作: 1)排序; 2)缩减信源; 3)递归调用霍夫曼算法得到相应的码字。 八、实验数据及结果分析:

3、s2s3s4s5s6s7s8Ss1 题目:已知信源:=,给出其中一P0.20,0.18,0.17,0.15,0.15,0.05,0.05,0.05个霍夫曼码,并求其平均码长和编码效率。 #include stdio.h #include stdlib.h #include #include #define n 8 #define m 2*n-1 typedef struct float weight; int lchild,rchild,parent; HTNode; typedef HTNode HuffmanTreem; void InitHuffmanTree(HuffmanTree T

4、) for(int i = 0;i m;i+) Ti.lchild = Ti.rchild = Ti.parent = -1; Ti.weight = 0.0; void InputWeight(HuffmanTree T) float tempn = 0.20,0.18,0.17,0.15,0.15,0.05,0.05,0.05; for(int i = 0;i n;i+) Ti.weight = tempi; void SelectMin(HuffmanTree T,int i,int *p1,int *p2) int j; *p1 = *p2 = m-1; Tm-1.weight = F

5、LT_MAX; for(j = 0;j = i;j+) if(Tj.parent != -1) continue; if(Tj.weight T*p1.weight) *p2 = *p1; *p1 = j; else if(Tj.weight T*p2.weight) *p2 = j; void CreateHuffmanTree(HuffmanTree T) int i,p1,p2; InitHuffmanTree(T); InputWeight(T); for(i = n;i = 0;j-) printf(%d,arrj); printf(n); return count; int mai

6、n HuffmanTree T; CreateHuffmanTree(T); float ave = 0; for(int i = 0;i n;i+) ave += Ti.weight*PrintHuffmanCode(T,i); printf(平均码长:t%fn,ave); printf(编码效率:t%f%n,ave/ceil(log(double)n)/log(double)2)*100); system(pause); 九、实验结论: 十、总结及心得体会: 本实验让我学习了使用 进行编程的方法,并对 的知识有了进一步了解。 十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号