数据结构课设排版过去文档.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内蒙古科技大学 本科生课程设计论文 题 目:Huffman编码和译码 学生姓名:吴涛 学 号:1167111206 专 业:计算机科学与技术 班 级:11-2 指导教师:丁雨 2013 年 7 月 4 日 内蒙古科技大学课程设计任务书 课程名称 数据结构课程设计 设计题目 Huffman编码和译码 指导教师 丁雨 时间 20013.6.24——2013.7.5 一、教学要求 1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。各字符的频率值出其中给字符编码,并针对一段文本(定义在上)进行编码和译码,实现一个编码/译码系统编码1. 分析课程设计题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 . 设计完成后提交课程设计报告资料查阅与讨论1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。数据结构:用面向对象方法与C++语言描述?清华大学出版社 2007 目录 第一章 算法设计的思想 3 第二章 算法的流程图 5 2.1、哈夫曼树的流程图 5 2.2、编码与解码的流程图 6 2.3、运行结果图 8 第三章 程序分析 9 3.1、程序功能模块分析: 9 3.2、程序的优化 10 附录 11 第一章 算法设计的思想 输入一个待编码的串,首先统计串中各字符出现的次数,称之为频次,假设统计频次的数组为count[],则哈夫曼编码每次找出count数组中的值最小的两个分别作为左右孩子,建立他们的父节点,循环这个操作2*n-1-n(n是不同的字符数)次,这样就把哈夫曼树建好了。建树的过程需要注意,首先把count数组里面的n个值初始化为哈夫曼树的n个叶子节点,他们的孩子节点的标号初始化为-1,父节点初始化为他本身的标号。接下来是编码,每次从哈夫曼树的叶子节点出发,依次向上找,假设当前的节点标号是i,那么他的父节点必然是myHuffmantree[i].parent,如果i是myHuffmantree[i].parent的左节点,则该节点的路径为0,如果是右节点,则该节点的路径为1。当向上找到一个节点,他的父节点标号就是他本身,就停止(说明该节点已经是根节点)。还有一个需要注意的地方:在查找当前权值最小的两个节点时,那些父节点不是他本身的节点不能考虑进去,因为这些节点已经被处理过了。 下面是字符串agdfaghdabsb的哈夫曼编码的哈夫曼树: 字符串:agdfaghdabsb 表1.1 哈夫曼树字符出现频次 出现的字符 字符出现的次数 a 3 g 2 d 2 f 1 h 1 b 2 s 1 合计 12 图1.1 哈夫曼生成树 由上面的哈夫曼树可知各个字符的编码如下: a:01 b:010 d:011 f:100 g:101 h:110 s:111 所以整个串的编码为: 011010111000110111001101010111010 哈夫曼译码原理: 对于哈夫曼的译码,可以肯定的是其译码结果是唯一的。 证明:因为哈夫曼编码是根据哈夫曼树来确定的,哈夫曼树是一棵二叉树,编码的时候是从树根一直往下走,直到走到叶子节点为止,在其经过的路径上,如果是树的左子树则为0,否则为1。因为每一次都要走到树的叶子节点,多以不可能存在两个编码a和b,使得a是b的前缀或者b是a的前缀。所以编码一定可以唯一确定。 根据上面的结论,我们可以很清楚地直到译码的方法: 定义两个指针p1,p2,P1指向当前编码的开始位置,P2指向当前编码的位置,如果P1-P2这一段编码能在编码库里面找到完全对应的编码结果,则译码成功,该段编码的译码结果就是与编码库里完全对应的编码的字符。循环次操作,直到译码结束! 第二章 算法的流程图 2.1、哈夫曼树的流程图 图2.1 哈夫曼树的流程图 初始化哈夫曼树时,叶节点的左右孩子都为-1,所有的节点树为2*n-1(n为叶节点数目),其父节点为其标号自己本身,结束的标志是其父节点就是自己。 2.2、编码与解码的流程图 图2.2 哈夫曼树的编码 编码分为两段,每次先找出最小的两个节点作为本次操

文档评论(0)

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

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

1亿VIP精品文档

相关文档