- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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(
您可能关注的文档
最近下载
- 2024官方兽医考试更新题库及答案.doc
- 八年级数学平方差公式20题(含答案).doc
- 市政工程分部分项划分表(全套)最新版.docx
- (中职)Access数据库应用技术教案课题: 任务6 创建操作查询.docx
- 通达信筹码峰左右画线主图通达信指标公式源码.docx
- 《GBT 24421.2-2023服务业组织标准化工作指南 第2部分:标准体系构建》最新解读.pptx
- GB 55009-2021 燃气工程项目规范.pdf
- 法医临床学试题.docx VIP
- 河北对口单招第十类职业适应性测试(计算机)-第一章计算机基础知识课件ppt.pptx VIP
- 九年级语文下册 第8课《假如我有九条命》课件 上海五四制版.ppt VIP
文档评论(0)