赫夫曼课程设计.doc

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

目 录 前言 1 正文 1 1.1 课程设计的教学目的和任务 1 1.2 课程设计的主要内容 1 1.3课程设计报告的要求 2 2.1.问题描述及基本要求 2 2.2. 算法思想 2 2.3 模块划分 2 2.3.1构造赫夫曼树 2 2.3.2赫夫曼编码(huffmancode) 3 2.4. 数据结构 5 2.5. 算法的时空分析 5 2.6 测试数据 6 2.7. 测试情况 6 总 结 7 参考文献: 7 附 录 9 前言 赫夫曼编码(Huffman Coding)是一种编码方式,赫夫曼编码是可变字长编码(VLC)的一种。赫夫曼压缩是个无损的压缩算法,一般用来压缩文本和程序文件。赫夫曼压缩属于可变代码长度算法一族。意思是个体符号(例如,文本文件中的字符)用一个特定长度的位序列替代。因此,在文件中出现频率高的符号,使用短的位序列,而那些很少出现的符号,则用较长的位序列。 正文 1.1 课程设计的教学目的和任务 (1) 使学生进一步理解和掌握所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。课程设计报告要求规范书写。应当包括如下:问题描述:描述要求编程解决的问题。基本要求:给出程序要达到的具体的要求。测试数据:设计测试数据,或具体给出测试数据。要求测试数据能全面地测试所设计程序的功能。算法思想:描述解决相应问题算法的设计思想。模块划分:描述所设计程序的各个模块(即函数)功能。数据结构:给出所使用的基本抽象数据类型所定义的具体问题的数据类型以及新定义的抽象数据类型。源程序:给出所有源程序清单,要求程序有充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。测试情况:给出程序的测试情况,并分析运行结果。赫夫曼编码是根据可变长最佳编码定理,应用赫夫曼算法而产生的一种编码,是消除编码冗余度最常用的方法。它的平均码字长度在具有相同输入概率集合的前提下,比其它任何一种可译码都小,因此,也常被称为紧凑码。’0’和‘1’确定找左右孩子。 2.3 模块划分 2.3.1构造赫夫曼树 给定n个实数w1,w2,......,wn(n≥2),求一个具有n个结点的二叉数,使其带权路径长度最小。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明赫夫曼树的WPL是最小的。(1) 根据与n个权值{w1,w2…wn}对应的n个结点构成具有n棵二叉树的森林F={T1,T2…Tn},其中第i棵二叉树Ti(1 ≤ i ≤ n)都只有一个权值为wi的根结点,其左、右子树均为空 (2) 在森林F中选出两棵根结点的权值最小的树作为一棵新树的左、右子树,且置新树的根结点的权值为其左、右子树上根结点权值之和 (3) 从F中删除构成新树的那两棵,同时把新树加入F中 (4) 重复第(2)和第(3)步,直到F中只含有一棵为止,此树便为赫夫曼树 int i; HFMTree p,HT1,HT2; //HT1,HT2分别存放权值最小和次小的节点的位置 p=*HT=(HFMTree)malloc(sizeof(HFMNode)); p-next=p-LChild=p-RChild=p-Parent=NULL; //初始化赫夫曼链表且有2n-1个节点 for(i=1;i2*n-1;i++) { p-next=(HFMTree)malloc(sizeof(HFMNode)); p=p-next; p-next=p-LChild=p-RChild=p-Parent=NULL; } for(i=0,p=*HT;in;i++){ //将各个字符出现的次数作为权值 p-weight=count[i]; p=p-next; } for(i=n;i2*n-1;i++){ //将后n-1个节点赋权值,建树 SelectMin(*HT,i,HT1,HT2); //每次从前i个节点中选取权值最小的两个节点 HT1-Parent=HT2-Parent=p; p-LChild=HT1; p-RChild=HT2; p-weight=HT1-weight+HT2-we

文档评论(0)

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

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

1亿VIP精品文档

相关文档