哈夫曼编码课程设计报告参考范本.docVIP

哈夫曼编码课程设计报告参考范本.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告 基于哈夫曼树的文件压缩 /解压程序 专业班级:信科( 2)班 姓名:徐爱娟 谢静 学号: xxxxx xxxx 20xx-12_31 一 需求分析 1.课题要求(实现文件的压缩与解压并计算压缩率) A. 描述压缩基本符号的选择方法 B.运行时压缩原文件的规模应不小于 5K 2.设计目标 软件名称:基于哈夫曼编码的文件压缩实用程序系统 软件组成: huffman.exe 制作平台及相关调试工具: Windows XP sp3 Microsoft Visual C++ 6.0 D 运行环境: dos/ win2K/win2003/winxp/ 性能特点: 软件由一个可执行文件组成 huffman.exe 为 dos 系统应用程序,体积小,高效快捷,适用范围广。 对单字节( 256 叶子)进行哈夫曼编码,压缩率良好 使用二级缓冲压缩 / 解压技术,速度比一般算法高 4. 可压缩最大体积为 4G 的文件,达到 Fat32 文件系统极限 文件索引体积比常规算法小50% 概要设计 1.相关函数介绍 1. bool InitFromFile(string fileadd) 从文件中初始化哈夫曼树函数 2. void HTCreat(HTNode ht[],int n) 构造哈夫曼树函数 3. void HCCreat(HTNode ht[],HCode hcd[],int n) 构造哈夫曼编码函数 4. void ConvertFile(HCode hcd[],string fileadd,string fileadd2) 压缩 and 写入文件函数 5. void DecompressionFile(string fileadd2,string fileadd3) 文件解压函数 6. string Compression(string fileadd) 压缩函数 7. string Decompression(string fileadd2) 解压函数 三 详细设计 1 压缩算法部分 A 核心算法: Huffman 编码是一种可变长编码方式,是由美国数学家 David Huffman 创立的,是 二叉树的一种特殊转化形式。编码的原理是:将使用次数多的代码转换成长度较短的代 码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。 Huffman 算法的 最根本的原则是:累计的 ( 字符的统计数字 * 字符的编码长度 ) 为最小,也就是权值 ( 字符的 统计数字 *字符的编码长度 ) 的和最小。 B 哈夫曼树构造算法: Huffman 树是二叉树的一种特殊转化形式。以下是构件 Huffman 树的例子:比如有 以下数据, ABFACGCAHGBBAACECDFGFAAEABBB先进行统计 A(8) B(6) C(4) D(1) E(2) F(3) G(3) H(1)括号里面的是统计次数 Clock ( ) 生成 Huffman 树:每次取最小的那两个节点 (node) 合并成一个节点 (node) ,并且将累 计数值相加作为新的接点的累计数值,最顶层的是根节点 (root) 注:列表中最小节点的 是指包括合并了的节点在内的所有节点,已经合并的节点不在列表中 运算的过程如下: 1:D+H(2) 2:DE+H(4) 3:F+G(6) 4:C+DEH(8) 5:B+FG(12) 6:A+CDEH(16) 7:ACDEH+BFG(28) 那么转化为 Huffman 树就是 Huffman 树 层数 Root ┌┴┐ ACDEH BFG 1 ┌┴┐┌┴┐ CDEH A B FG 2 ┌┴┐ ┌┴┐ DEH C F G 3 ┌┴┐ DH E 4 ┌┴┐ D H 5 取左面是 1 右面是 0 则有。 注:层数就是位数或者说是代码长度,权值 =代码长度 * 该字的统计次数。 代码 位数 权值 A = 10 2 16 B = 01 2 12 C = 110 3 12 D = 11111 5 5 E = 1110 4 8 F = 001 3 9 G = 000 2 6 H = 11110 5 5 可以看出 Huffman 代码是唯一可解的 (uniquely decodable) ,如果你读到 110 就一定是 C ,不会有任何一个编码是以 110 开始的。 如果不使用 Huffman 算法,而使用普通的编码,结果是什么呢? Huffman 树 层数 Root ┌┴┐ ABCD EFGH 1 ┌┴┐ ┌┴┐ AB CD EF GH 2 ┌┴┐┌┴┐┌┴┐┌┴┐ A B C D E F G H 3 取左面是 1 右面是 0 则有 代码 位数 权值 A = 111 3 24 B = 11

文档评论(0)

wss1979 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档