




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、昆明理工大学信息工程与自动化学院学生实验报告( 201 201 学年 第 一 学期 )课程名称:算法设计与分析 开课实验室: 年 月 日年级、专业、班 学号 姓名 成绩实验项目名称哈夫曼编码指导教师 教师评语该同学是否了解实验原理:A.了解B.基本了解C.不了解该同学的实验能力:A.强 B.中等 C.差 该同学的实验是否达到要求:A.达到B.基本达到C.未达到实验报告是否规范:A.规范B.基本规范C.不规范实验过程是否详细记录:A.详细B.一般 C.没有 教师签名: 年 月 日一、上机目的及内容1.上机内容设需要编码的字符集为d1, d2, , dn,它们出现的频率为w1, w2, , wn,
2、应用哈夫曼树构造最短的不等长编码方案。2.上机目的(1)了解前缀编码的概念,理解数据压缩的基本方法;(2)掌握最优子结构性质的证明方法;(3)掌握贪心法的设计思想并能熟练运用。二、实验原理及基本技术路线图(方框原理图或程序流程图)(1)证明哈夫曼树满足最优子结构性质;(2)设计贪心算法求解哈夫曼编码方案;(3)设计测试数据,写出程序文档。数据结构与算法:typedef char *HuffmanCode; /动态分配数组,存储哈夫曼编码typedef struct unsigned int weight; /用来存放各个结点的权值 unsigned int parent,LChild,RChi
3、ld; /指向双亲、孩子结点的指针 HTNode, *HuffmanTree; /动态分配数组,存储哈夫曼树程序流程图:三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUAL C+6.0软件四、实验方法、步骤(或:程序代码或操作过程)程序代码:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct unsigned int weight; unsigned int parent,LChild,RChild; HTNode, *HuffmanTree;
4、/动态分配数组,存储哈夫曼树typedef char *HuffmanCode; /动态分配数组,存储哈夫曼编码void Select(HuffmanTree *ht,int n,int *s1,int *s2) int i,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.par
5、ent=0 && i!=(*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个权值void CrtHuffmanTree(HuffmanTree *ht,int *w,int n) int m,i,s1,s2; m=2*n-1; /总的结点数 *ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for
6、(i=1; i<=n; i+) /1-n号存放叶子结点,初始化 (*ht)i.weight=wi; (*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("n所构造的哈夫曼树为: n"); for(i=n+1; i<=m; i+) /创建非叶子结点,建哈夫曼树 Select(ht,i-1,&
7、s1,&s2); (*ht)s1.parent=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)n",(*ht)i.weight,(*ht)s1.weight,(*ht)s2.weight); printf("n"); /从叶子结点到根,逆向求每个叶子结点对应的哈夫曼编码void CrtHuffmanCode(HuffmanTree *ht, Huffma
8、nCode *hc, int n) char *cd; /定义的存放编码的空间 int a100; int i,start,p,w=0; unsigned int c; hc=(HuffmanCode *)malloc(n+1)*sizeof(char *); cd=(char *)malloc(n*sizeof(char); cdn-1='0' for(i=1; i<=n; i+) /求n个结点对应的哈夫曼编码 ai=0; start=n-1; /起始指针位置在最右边 for(c=i,p=(*ht)i.parent; p!=0; c=p,p=(*ht)p.parent)
9、 /从叶子到根结点求编码 if( (*ht)p.LChild=c)cd-start='1' ai+; else cd-start='0' ai+; hci=(char *)malloc(n-start)*sizeof(char); /为第i个编码分配空间 strcpy(hci,&cdstart); free(cd); for(i=1; i<=n; i+) printf("权值为%d的哈夫曼编码为:%sn",(*ht)i.weight,hci); for(i=1; i<=n; i+) w+=(*ht)i.weight*ai;
10、 printf("n带权路径长度WPL为:%dnn",w);void main() HuffmanTree HT; HuffmanCode HC; int *w,i,n,wei; printf("tttt哈夫曼编码n" ); printf("请输入结点个数:" ); scanf("%d",&n); w=(int *)malloc(n+1)*sizeof(int); printf("n请分别输入这%d个结点的权值:n",n); for(i=1; i<=n; i+) printf("结点%d: ",i); fflush(stdin); scanf("%d",&wei); wi=wei; CrtHuffmanTree(&HT,w,n); CrtHuffmanCode(&HT,&HC,n);五、实验过程原始记录( 测试数据、图表、计算等)六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省抚州市本年度(2025)小学一年级数学统编版专题练习(上学期)试卷及答案
- 电机原理及应用模拟题(含答案)
- 安徽省安庆市达标名校2025届高考仿真模拟英语试卷含解析
- 评茶员(中级)考试模拟题(含参考答案)
- 云南省保山市重点中学2025届高三考前热身英语试卷含解析
- 皮革制品的品牌推广考核试卷
- 耐火土石矿山环境保护与矿山环境保护教育培训考核试卷
- 船用氧气与乙炔设备安全操作考核试卷
- 淀粉与变性淀粉在食品中的应用考核试卷
- 生物技术前沿与未来趋势考核试卷
- 2025届江苏省南京市建邺区重点中学中考化学模拟试卷含解析
- 人教版数学八年级下册17.1《勾股定理》(第1课时)听评课记录
- 中职高教版(2023)语文职业模块-第七单元语文综合实践-走进传统节日-探寻文化根脉【课件】
- 2025届高考英语读后续写提分技巧+讲义
- 舞蹈疗法在儿童精神疾病康复中的应用-洞察分析
- 重大版小学英语六年级下册期中试卷(含答案含听力原文无听力音频)
- 粮食熏蒸培训课件
- 《基于Spring Boot的学生信息管理系统的设计与实现》
- 砂石场生产线承包合同
- 2024秋国家开放大学《四史通讲》形考作业、期末大作业试卷ABC参考答案
- 辽宁省第二届职业技能大赛(健康照护赛项)理论参考试题及答案
评论
0/150
提交评论