实验四 哈夫曼与哈夫曼编码.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 哈夫曼与哈夫曼编码

实验四 哈夫曼树与哈夫曼编码 一、实验目的 1、使学生熟练掌握哈夫曼树的生成算法。 2、熟练掌握哈夫曼编码的方法。 二、实验内容 [问题描述] [基本要求]1. 初始化:从键盘读入n个字符,以及它们的权值,建立Huffman树。(具体算法可参见教材P147的算法6.12) 2. 编码:根据建立的Huffman树,求每个字符的Huffman编码。对给定的待编码字符序列进行编码。 [选作内容] . 译码:利用已经建立好的Huffman树,对上面的编码结果译码。译码的过程是分解电文中的字符串,从根结点出发,按字符’0’和’1’确定找左孩子或右孩子,直至叶结点,便求得该子串相应的字符。4. 打印?Huffman树。“CFBABBFHGH”(也可自己设定数据进行测试)。 算法设计 1、主要思想:******************赫夫曼树的构造********************** (1) 由给定的 n 个权值 {w1, w2, …, wn},构造具有 n 棵二叉树的森林 F ={T1, T2, …, Tn },其中每棵二叉树 Ti 只有一 个带权为 wi 的根结点, 其左、右子树均为空。 (2) 在 F 中选取两棵根结点的权值最小的二叉树, 作为左、右子树构造一棵新的二叉树。置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。 (3)在 F 中删去这两棵二叉树, 把新的二叉树加入F。 (4)重复(2)和(3), 直到 F 中仅剩下一棵树为止。 ****************************霍夫曼编码***************************** 主要用途是实现数据压缩。由于赫夫曼树中没有度为1的节点,则一棵有n个叶子结点的赫夫曼树共有2n-1个结点,可以存储在一个大小为2n-1的一维数 组中。由于在构成赫夫曼树之后,为求编码需从叶子结点出发走一条从叶子到根的路径;而为译码需从根出发走一条从根到叶子的路径。则对每个结点而言,既须知双亲的信息,又需知孩子结点的信息。 本程序包含三个模块 1)主函数 Int main() { 先输入结点总数; 分别输入各个结点; 调用建立哈夫曼树函数调用编码函数读入建立的哈夫曼树进行编码typedef struct //定义新数据类型即点结构{int weight; //权重域 int parent,lchild,rchild; //指针域}htnode; //结点类型标识符//typedef htnode * huffmanstree; //定义哈弗曼数类型htnode ht[maxnodenumber];//定义三叉链表存储数组typedef struct //定义保存一个叶子节点哈弗曼编码的结构{ int bit[maxbit]; //定义一维数组为编码域 int start; //定义位置域}hcnodetype; //定义编码类型 Int main() { 先输入结点总数; 分别输入各个结点; 调用建立哈夫曼树函数调用编码函数读入建立的哈夫曼树进行编码htnode * creatstree(int n) ——建立哈树算法实现函数void getstree(htnode * ht,int n) ——哈夫曼编码算法及打函数的实现 四、调试分析 输入结点总数 分别输入各个结点 赫夫曼的编码 总结 本次实验电子报告中我原来打算加上各?函数的简单流程图,但是由于我处理图形方面还比较不熟练,画了三四个小时也不太满意,所以索?性将几个小时的努力通过del键结束了,所以这次报告不太令人满意,我将在以后的报告中加上示意?图,多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全,使程序更有实用价值,提高?编程能力。 我更加认识到自己动手的重要性,因为问题看起来很简单,但是等到亲自去实践时,你会发现出现很多问题。正是通过不断的发现问题、解决问题,我们才更加深刻的领悟到为核心,进而更好的掌握所学的知识;其次,我认识到了自己不明白的地方一定要向老师请教,老师的点拨,让人豁然开朗,有助于我们更好的理解和掌握。最后,我理解栈的顺序结构,实现了一些基本操作,掌握了栈的先进后出的特点,并且能运用这一点解决实际问题。 六、源代码 #includestdio.h #includeiostream.h #includemalloc.h #define maxvalue 10000 //定义最大权值常量 #define maxnodenumber 100 //定义节点最大数 #define maxbit 10 //定义哈弗

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档