哈夫曼编译码系统的设计与实现.docx

哈夫曼编译码系统的设计与实现.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机与信息技术学院设计性实验报告 专业: 年级/班级: 2011—2012学年第一学期 课程名称 数据结构 指导教师 木组成员 学号姓名 实验地点 过街楼机房 实验时间 12月2日 项日名称 哈夫曼编/译码系统的设计与实现 实验类型 设计性 一、 实验1=1的 理解哈夫曼树的特征及其应用;在对哈夫曼树进行理解的基础上,构造哈夫 曼树,并用构造的哈夫曼树进行编码和译码;通过该实验,使学生对数据结 构的应用有更深层次的理解。 二、 实验仪器或设备 学院提供公共机房,1台/学生微型计算机。 三、 总体设计(设计原理、设计方案及流程等) 设计原理: 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降 低传输成木。但是,这要求在发送端通过一个编码系统对待传数据预先编码, 在接收端将传来的数据进行译码(解码)。对于双工信道(即可以双向传输 信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站 设计一个哈夫曼编/译码系统。 设计方案及流程: 1) 初始化(Initialzation)o从数据文件DataFile.dat中读入字符及每个字符 的权值,建立哈夫曼树HuffTree; 2) 编码(EnCoding)o用已建好的哈夫曼树,对文件ToBeTran.dat +的文本 进行编码形成报文,将报文写在文件Code.txt中; 3) 译码(Decoding)<>利用已建好的哈夫曼树,对文件CodeFile.dat中的代 码进行解码形成原文,结果存入文件Textfile.txt中; 4) 输出(Output):输tB DataFile.dat中出现的字符以及各字符出现的频度 (或概率);输出ToBeTran.dat及其报文Code.txt;输出CodeFile.dat及其原 文 Textfile.txt; 要求:所设计的系统应能在程序执行的过程屮,根据实际情况(不同的输入) 建立DataFile.dat^ ToBeTran.dat和CodeFile.dat三个文件,以保证系统的通 用性。 四、实验步骤(包括主要步骤、代码分析等) (1)完成程序的主框架设计,进行调试,验证其正确性。 在给定一组具有确定权值的叶结点,可以构造出不同的带权二叉树。例如: 给出4个叶结点,设具权值分别为1, 3, 5, 7,我们可以构造出形状不同 的多个二叉树。这些形状不同的二叉树的带权路径长度将各不相同。这五棵 树的带权路径长度分別为: WPL = IX2 + 3X2 + 5X2 + 7X2 = 32 WPL= IX3 + 3X3 + 5X2 + 7X1 = 29 WPL=1X2 + 3X3 + 5X3 + 7X1 = 33 WPL=7X3 + 5X3 + 3X2 + 1X1=43 WPL = 7X 1 + 5X2+ 3X3 + 1X3 = 29 由此可见,由相同权值的一组叶子结点所构成的二叉树有不同的形态和不同 的带权路径长度,那么如何找到带权路径长度最小的二义树(即哈夫曼树) 呢?根据哈夫曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越人 的叶结点越靠近根结点,而权值越小的叶结点越远离根结点。哈夫曼 (a)(c)(b)(d)(e) (a) (c) (b) (d) (e) (Haffman)依据这一特点提出了一种方法,这种方法的基本思想是: 根据给定的n个权值{wl, w2, wn},构造n棵二叉树的集合 F = {Tl, T2,…,Tn},具中每棵二义树中均只含一个带权值 为wi的根 结点,其左、右子树为空树; 在F中选取其根结点的权值为最小的两棵二叉树,分别作为左、右 子树构造一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子 树根结点的权值之和; 从F中删去这两棵树,同时将新生成的二叉树加入F中; 重复第 ⑵ 和(3)两步,直至F中只含一棵树为止。 例如:叶结点权值集合为W = {1, 3, 5, 7}的哈夫曼树的构造过程。 第一步Q 0 0 O 第二步O Q o 4 Huffman算法实现: 一棵有n个叶子结点的Huffman树有2n-l个结点 采用顺序存储结构——一维结构数纽 结点类型定义 typedef struct { int data; int weight; int pa,lc,rc; }JN; 详细设计,进行调试,验证其正确性。 算法如下: void Initialzation(HuffmanTree HT,HuffmanCode HC,int *w」nt n,ElemType *d){ //w存放n个字符的权值(均0),构造哈弗曼书HT,并求出n个字符的哈 弗曼编码HC。 讦(nl)return; Huff ma nTree p; m=2*n-l; HT=(HuffmanTree)malloc(

文档评论(0)

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

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

1亿VIP精品文档

相关文档