算法分析与设计-实验二-哈夫曼编码.doc

算法分析与设计-实验二-哈夫曼编码.doc

ID:57835055

大小:218.00 KB

页数:7页

时间:2020-09-02

算法分析与设计-实验二-哈夫曼编码.doc_第1页
算法分析与设计-实验二-哈夫曼编码.doc_第2页
算法分析与设计-实验二-哈夫曼编码.doc_第3页
算法分析与设计-实验二-哈夫曼编码.doc_第4页
算法分析与设计-实验二-哈夫曼编码.doc_第5页
资源描述:

《算法分析与设计-实验二-哈夫曼编码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、昆明理工大学信息工程与自动化学院学生实验报告(201—201学年第一学期)课程名称:算法设计与分析开课实验室:年月日年级、专业、班学号姓名成绩实验项目名称哈夫曼编码指导教师教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有□教师签名:年月日一、上机目的及内容1.上机内容设需要编码的字符集为{d1,d2,…,dn},它们出现的频率为{w1,w2,…,w

2、n},应用哈夫曼树构造最短的不等长编码方案。2.上机目的(1)了解前缀编码的概念,理解数据压缩的基本方法;(2)掌握最优子结构性质的证明方法;(3)掌握贪心法的设计思想并能熟练运用。二、实验原理及基本技术路线图(方框原理图或程序流程图)(1)证明哈夫曼树满足最优子结构性质;(2)设计贪心算法求解哈夫曼编码方案;(3)设计测试数据,写出程序文档。数据结构与算法:typedefchar*HuffmanCode;//动态分配数组,存储哈夫曼编码typedefstruct{unsignedintweight;//用来存放各个结点的权值unsignedintparent,LChild

3、,RChild;//指向双亲、孩子结点的指针}HTNode,*HuffmanTree;//动态分配数组,存储哈夫曼树程序流程图:三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUALC++6.0软件四、实验方法、步骤(或:程序代码或操作过程)程序代码:#include#include#includetypedefstruct{unsignedintweight;unsignedintparent,LChild,RChild;}HTNode,*HuffmanTree;//动态分配数组,存储哈夫曼树

4、typedefchar*HuffmanCode;//动态分配数组,存储哈夫曼编码voidSelect(HuffmanTree*ht,intn,int*s1,int*s2){inti,min;for(i=1;i<=n;i++){if((*ht)[i].parent==0){min=i;break;}}for(i=1;i<=n;i++){if((*ht)[i].parent==0){if((*ht)[i].weight<(*ht)[min].weight)min=i;}}*s1=min;for(i=1;i<=n;i++){if((*ht)[i].parent==0&&i!=(*

5、s1)){min=i;break;}}for(i=1;i<=n;i++){if((*ht)[i].parent==0&&i!=(*s1)){if((*ht)[i].weight<(*ht)[min].weight)min=i;}}*s2=min;}//构造哈夫曼树ht,w存放已知的n个权值voidCrtHuffmanTree(HuffmanTree*ht,int*w,intn){intm,i,s1,s2;m=2*n-1;//总的结点数*ht=(HuffmanTree)malloc((m+1)*sizeof(HTNode));for(i=1;i<=n;i++)//1--n号存

6、放叶子结点,初始化{(*ht)[i].weight=w[i];(*ht)[i].LChild=0;(*ht)[i].parent=0;(*ht)[i].RChild=0;}for(i=n+1;i<=m;i++)//非叶子结点的初始化{(*ht)[i].weight=0;(*ht)[i].LChild=0;(*ht)[i].parent=0;(*ht)[i].RChild=0;}printf("所构造的哈夫曼树为:");for(i=n+1;i<=m;i++)//创建非叶子结点,建哈夫曼树{Select(ht,i-1,&s1,&s2);(*ht)[s1].parent=

7、i;(*ht)[s2].parent=i;(*ht)[i].LChild=s1;(*ht)[i].RChild=s2;(*ht)[i].weight=(*ht)[s1].weight+(*ht)[s2].weight;printf("%d(%d,%d)",(*ht)[i].weight,(*ht)[s1].weight,(*ht)[s2].weight);}printf("");}//从叶子结点到根,逆向求每个叶子结点对应的哈夫曼编码voidCrtHuffmanCode(HuffmanTree*ht,Huf

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。