北邮哈夫曼树实验报告.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《北邮哈夫曼树实验报告.doc》由会员分享,可在线阅读,更多相关《北邮哈夫曼树实验报告.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验报告实验名称: 实验三树学生姓名:班 级: 2011211114班内序号: 14学 号: 2011210400日 期: 2012 年11 月29 日1实验要求(1) 实验目的 掌握二叉树基本操作的实现方法 了解赫夫曼树的思想和相关概念 学习使用二叉树解决实际问题的能力(2) 实验内容利用二叉树结构实现赫夫曼编/解码器。基本要求:1、 初始化(Init):能够对输入的任意长度的字符串 s 进行统计,统计每个字符的频度,并建立赫夫曼树2、 建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。3、 编码(Encoding):根据编码表对输入的字符
2、串进行编码,并将编码后的字符串输出。4、 译码(Decoding):利用已经建好的赫夫曼树对编码后的字符串进行译码,并输出译码结果。5、 打印(Print):以直观的方式打印赫夫曼树(选作)6、 计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼编码的压缩效果。测试数据:I love data Structure, I love Computer。I will try my best to study dataStructure.2. 程序分析2.1 存储结构该程序使用哈夫曼树结构存储数据,并利用哈夫曼树进行编码得到每个字符的编码从而第1页减少数据的存储空间,哈夫曼树是二叉树,以各频
3、度作为叶子结点组成哈夫曼树,而每个结点存储的有其频度,其双亲结点,其左孩子和右孩子,并且哈夫曼树有一个相应的编码表存储各叶子结点的编码。哈夫曼树的存储结构如图: D EBA C2.2 关键算法分析1关键算法哈夫曼树解码和译码问题的实质就是把已知的一段字符串,统计每个字符的频度,并按照频度建立哈夫曼树,每个叶子结点都为一个频度,然后利用建好的哈夫曼树建立编码表,从而得到每个字符的编码,这样每输入一段字符都可以去编码表找对应的字符从而编码成一段二进制码,这样的编码存储更节省存储空间,从而达到压缩效果。关键算法如下:1:把输入的一段字符串转化为每个字符的频度,并对应一个字符数组存储字符: 利用 AS
4、CII 码有 128 个并对应着的整形,用一个整形数组存储每个字符出现的次数,数组的下标为每个字符的 ASCII 码对应整数。 用赋好值的整形数组每个元素除以总的元素并对应存入一个 double 类型的数组(元素为 0 的不存),并建立一个字符数组存储每个字符对应 double 数组的每一个元素(频度)。2:利用建好的 double 数组建立哈夫曼树:建立一个含 2*k-1 个结点的树,并把 k 个频度对应存入 0-k-1 个结点的 weight 域,并令这些结点的左孩子,右孩子,和双亲都为-1。找出 0k-1 个结点频度最小的两个结点,并令第 k 个结点的频度等于两节点频度之和,一个结点为其
5、左孩子,一个结点为其右孩子。循环步骤 2,使建好的树每个结点的域都填充好(每次比较除去已经提取出来的结点,并加入新建好的结点)。3:利用建好的哈夫曼树建立编码表:编码表 data 域存字符,code 域存每个字符的编码。找到叶子结点的双亲,判断如果该结点是双亲的左孩子则存编码0,右孩子存编码 1,然后再找其双亲的双亲,判断双亲是祖父结点的左孩子还是右孩子,重复上述步骤直到根结点。第2页把每个字符的编码倒置并输出每个字符的编码。4:译码函数: 如果是第一个字符是 0 则找根结点的左孩子,如果是 1 则找右孩子。 继续令找到的结点作为双亲并找下一个字符重复步骤(1)(2)直到叶子结点。 重复(1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮哈夫曼树 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内