实验报告(哈夫曼编码)
哈弗曼编码实验报告
一.实验内容描述
1.实验名称:
哈夫曼编码译码器
2.实验内容:
利用哈夫曼树实现电文和比特流互相转换的功能。
二.存储结构分析
1.存储需编码字符的字符型数组 chars[N]
2.哈夫曼树的结点元素存储结构
typedef struct {
int weight,parent,left,right;
}HTNode;
3.哈夫曼树存储结构
typedef struct {
HTNode *Htree;
int root;
}HuffmanTree;
4.存储每个字符对应的编码的二维数组
HC[N][N];
三.数据结构分析
1.宏定义 OK为1,Error为0 ,定义Status为int型,N为100,方便调节。
2.自定义结点结构:包括整型变量weight,parent,left,right;字符型变量等。
3.定义数组HC[N][N],二维数组,可实现编码的存储。
四.程序功能
======Huffman编码解码器======
1----------输入字符创建编码
2----------输出统计结果
3----------打印哈夫曼树
4----------打印哈夫曼编码
5----------电文->比特流
6----------比特流->电文
五.各函数分析
1.主函数
(1)问题描述
显示功能菜单,等待选择。
哈弗曼编码实验报告
1,输入字符创建编码:输入一段字符串,存储到字符型数组中。
2,输出统计结果:对1中读取的字符串进行统计,输出字符及相应个数。
3,打印哈夫曼树:生成哈夫曼树,并打印其存储数组。
4,打印哈夫曼编码:利用哈夫曼树对字符编码,输出字符及相应编码。
5, 电文->比特流:输入一段字符,完成对其的编码,输出。
6,比特流->电文:输入一段编码,完成对其的译码,输出相应字符串。
2. 统计字符函数
(1)问题描述:从主函数读取输入的字符串,统计个数,完成输出相应字符串及个数。
(2)算法分析:依次读取字符,先判断读取的字符是否出现过,循环比较,出现过则对应个数加1,未出现过填入chars[N]数组,个数为1。
算法的时空分析:时间复杂度0(n):最低,当所有字符重复。
时间复杂度O( ²):n*(1+n)/2 最高,当所有字符不相同。
(3)数据结构:用chars[]字符型数组存储字符,num[]存储各字符相应个数。
(4)程序结构:从主函数直接调用。
(5)调试分析:输入字符串 aabbbbbccddddefffggh
(6)测试结果:如图为输入、输出结果
3. 查找最小权值点函数
(1)问题描述:访问哈夫曼树组结点,在结点parent值为0的节点中,挑选最小权值的点。
(2)算法分析:min初始化为0,依次读取数组结点元素,当parent值为0时,权值与最小值相比较,小则赋值给最小值,用k记录节点位置,全部比较完后,返回最小值点k。 算法的时空分析:时间复杂度0(n)
(3)数据结构:二维数组存储哈夫曼树,整型变量min。
(4)程序结构:从生成哈夫曼树函数中调用。
4.创建哈夫曼树函数
(1)问题描述:读取字符串,生成哈夫曼树.
(2)算法分析:读取字符及个数,个数作为权值填入哈夫曼数组中,parent,left,right初始化为0.选择两个最小值点,生成新结点,三个结点的parent,left,right值依次填写。再选择最小值点,以此循环,直至除最后一个所有结点parent值不为0.
算法的时空分析:时间复杂度O( ²):2*(n+n+1+n+2+…+2n-1)=3*n²-n
(3)数据结构:二维数组存储哈夫曼树,整型变量weight,parent,left,right。
(4)程序结构:从主函数中调用,调用了查找最小权值点函数。
(5)调试分析:用输入的字符串创建哈夫曼树,打印数组。
(6)测试结果:如图为输入、输出结果,
哈弗曼编码实验报告
5.字符编码函数
(1)问题描述:利用哈夫曼树对已有字符进行编码,结果存储在二维数组HC[][]中。
(2)算法分析:初始化栈,对哈夫曼树进行先序遍历,遇左子树0进栈,右子树1进栈,遇到叶子结点输出栈内元素,保存在HC数组中,出栈一个元素,继续遍历,直至遍历结束,所有字符完成编码。
算法的时空分析:时间复杂度O( ²)
(3)数据结构:二维数组存储哈夫曼树,栈,二维数组HC[][]存储编码。
(4)程序结构:主函数直接调用了该函数,该函数调用了进栈、出栈、输出栈的函数。
(5)测试结果:如图为输出结果。
6.字符串转换为编码函数
(1)问题描述:利用字符及其编码,将输入的电文转换为比特流。
(2)算法分析:依次读取字符,调用其在HC中对应编码,输出编码字符串,再读取下一个字符,直至所有字符完成编码。
算法的时空分析:时间复杂度O( ):n个字符访问n次编码数组。
(3)数据结构:二维数组存储哈夫曼树,二维数组HC[][]存储编码。
(4)程序结构:主函数直接调用了该函数。
(5)调试分析:主函数输入电文 ddbagheccf
(6)测试结果:如图为输出结果。
哈弗曼编码实验报告
7.编码转换为字符串函数
(1)问题描述:利用生成的哈夫曼树,将输入的比特流转换为电文。
(2)算法分析:依次读取编码,从哈夫曼树的树根开始,遇到1访问左子树,遇到0访问右子树,直至访问到叶子结点,输出其结点元素,继续读取编码,直至所有比特流完成译码。 算法的时空分析:时间复杂度O( ):n个字码访问n次哈夫曼树数组。
(3)数据结构:二维数组存储哈夫曼树。
(4)程序结构:主函数直接调用了该函数。
(5)调试分析:主函数输入比特流 010011111011011100110111111010
(6)测试结果:如图为输出结果。
六.实验体会与收获
1.熟练掌握了定义哈夫曼数组、定义各类型存储数组的基本操作
2.掌握了创建哈夫曼树、生成编码、电文比特流互相转换的算法
3.了解了如何利用通过调用函数使精简、清晰化。
4.了解了如何增强程序健壮性
5.训练了程序的调试技术。
…… 此处隐藏:873字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [初中教育]婚姻家庭法学教学教案
- [初中教育]浅谈小学语文教学中的创新教育
- [初中教育]中华人民共和国侵权责任法2009
- [初中教育]2016-2022年中国薄膜太阳能电池行业发
- [初中教育]多级轻型井点降水的应用
- [初中教育]外语教学法流派介绍和简评
- [初中教育]实验一、典型环节及其阶跃响应
- [初中教育]内蒙古2012-2013学年度国家奖学金获奖
- [初中教育]移动通信营销渠道管理探讨
- [初中教育]初三化学第一学期第一第二章基础知识点
- [初中教育]一天的食物教学设计
- [初中教育]光导照明系统的基本结构及工作原理
- [初中教育]长春市十一高、东北师范大学附属中学、
- [初中教育]“十三五”规划重点-配重式装卸车项目
- [初中教育]领导方法和领导艺术
- [初中教育]第三章 植物病虫草鼠害诊断与防治基
- [初中教育]2019届九年级语文上册 第二单元 6纪念
- [初中教育]甲级单位编制水豆腐项目可行性报告(立
- [初中教育]Ch8-1补充 09101数据库系统原理及应用-
- [初中教育]2017-2023年中国吊装设备行业市场分析
- 制作毕业纪念册需要哪些材料
- 2015-2016学年高二化学苏教版选修4课件
- 哈佛管理导师-创建商业案例
- 职场交际中的谈吐礼仪知识与职场会议接
- 中国糕点及面包行业发展现状与竞争战略
- 沂河“12·7”洪水茶山拦河坝
- 管道水流量计算公式
- 4-2发电机火灾事故处置方案
- 数字信号处理实验五
- 2009年经济师(中级)金融专业知识全真试
- 历史街区保护规划--04历史文化遗产保护
- 宁夏回族自治区中小学职称评价标准
- 评先评优测评表
- 圆的切线证明及线段长求解在在中考中的
- 【解析版】2015年江苏省南京外国语学校
- 人教版八年级上册科学第一章习题精华
- 责任心与执行力
- SA8000社会责任管理体系标准培训
- IgA肾病的饮食应注意
- 杭州市建设工程文件归档整理方案(试行)




