北邮数据结构实验报告实验三哈夫曼.pdf
![资源得分’ 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)
《北邮数据结构实验报告实验三哈夫曼.pdf》由会员分享,可在线阅读,更多相关《北邮数据结构实验报告实验三哈夫曼.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、北京邮电大学信息与通信工程学院第 1页数据结构实验报告实验名称:实验三哈夫曼编/解码器的实现学生姓名:侯在鹏班级:2012211120班内序号:13学号:2012210583日期:2013 年 12 月 10 日1实验要求利用二叉树结构实现赫夫曼编/解码器。基本要求:1、初始化(Init):能够对输入的任意长度的字符串 s 进行统计,统计每个字符的频度,并建立赫夫曼树2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输出。4、译码(Decoding):利用已经建好的
2、赫夫曼树对编码后的字符串进行译码,并输出译码结果。5、打印(Print):以直观的方式打印赫夫曼树(选作)6、计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼编码的压缩效果。测试数据:I love data Structure,I love Computer。I will try my best to study data Structure.提示:1、用户界面可以设计为“菜单”方式:能够进行交互。2、根据输入的字符串中每个字符出现的次数统计频度,对没有出现的字符一律不用编码。2.程序分析北京邮电大学信息与通信工程学院第 2页2.1 存储结构程序实现了基本的编解码功能输入字符串选择
3、工作目标编码解码相关树,表显示编码上根节点向下,左 0 右 1根据不同字符在尾端相应排位,获得自己的编码,存储。解码上依次读取数据 0 或 1,循序寻找,最后在存储中找到对应编码的字符,输出再重新读取下一数字开始的数码在哈夫曼树编码这个程序中,所有数据用的存储结构都是顺序存储结构,其中包括顺序表和树(三叉树)树的存储结构如下:(输入的字符串为 assddddffffffffgggggggggggggggg)012345678ASC9115100102103weight124816371531lchild-1-1-1-110234rchild111111567parent-55-6-7-8678
4、0上结构图中,填充为黄色的部分为写入内存中的部分。每一行的部分为数组的下标,左边部分为所定义的结构的成员。其中有的结点的父节点的下标是一个负数,用来说明该节点是该节点的父节点的左孩子,正数说明的是该节点的父节点的右孩子。父节点这零的节点说明该节点是该哈夫曼树的根节点。画出树的结构如下画所示:(结点中第一个数表示这个字符的 ASC编码,第二个数字表示权值)北京邮电大学信息与通信工程学院第 3页37153116102897110041152876543210000010111红色箭头表示父指针,黑色箭头表示孩子指针由上面的图可知,原字符串编码后的二进制编码为11101111111111011011
5、011010101010101010100000000000000000字符串中出现的所有的字符的编码如下:a1110;s1111;d110;f10;g02.2 关键算法分析2.2.12.2.1 选择两个最小权值的函数选择两个最小权值的函数算法伪代码:算法伪代码:(1)初始化最小权值 min1,min2.可引用变量 x,y。(2)遍历哈夫曼树,比较字符的权值与 min1,min2 的大小。若小于 min1,则将 min1 值赋给min2,字符权值赋给 min1,同时改变权值最小的结点编号 x,y.若大于 min1 同时小于 min2,则将字符权值赋给 min2,改变 y 值。源代码:源代码:v
6、oid Huffman:SelectMin(int&x,int&y,int a,int b)/选出两个权值最小的结点int j,min1,min2;min1=min2=-1;for(j=a;jb;j+)if(HTreej.parent=-1)if(HTreej.weightmin1|min2=-1)if(min1!=-1)北京邮电大学信息与通信工程学院第 4页min2=min1;y=x;min1=HTreej.weight;x=j;elseif(HTreej.weightmin2|min2=-1)min2=HTreej.weight;y=j;时间复杂度:时间复杂度:遍历链表,时间复杂度为 O(
7、n)2.2.2.2.2.2.创建哈夫曼树创建哈夫曼树算法伪代码:算法伪代码:(1)创建一个长度为 2*n-1 的三叉链表(2)将存储字符及其权值的链表中的字符逐个写入三叉链表的前 n 个结点的 data 域,并将对应结点的孩子域和双亲域赋为空(3)从三叉链表的第 n 个结点开始,i=n(3.1)从存储字符及其权值的链表中取出两个权值最小的结点 x,y,记录其下标 x,y。(3.2)将下标为 x 和 y 的哈夫曼树的结点的双亲设置为第 i 个结点(3.3)将下标为 x 的结点设置为 i 结点的左孩子,将下标为 y 的结点设置为 i 结点的右孩子,i 结点的权值为 x 结点的权值加上 y 结点的权
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 三哈夫曼
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内