实验三哈夫编码.doc

实验三哈夫编码.doc

ID:55514484

大小:220.50 KB

页数:9页

时间:2020-05-15

实验三哈夫编码.doc_第1页
实验三哈夫编码.doc_第2页
实验三哈夫编码.doc_第3页
实验三哈夫编码.doc_第4页
实验三哈夫编码.doc_第5页
资源描述:

《实验三哈夫编码.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构实验报告1.实验要求1实验目的Ø掌握二叉树基本操作的实现方法Ø了解赫夫曼树的思想和相关概念Ø学习使用二叉树解决实际问题的能力利用二叉树结构实现赫夫曼编/解码器。基本要求:1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个字符的频度,并建立赫夫曼树2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输出。4、译码(Decoding):利用已经建好的赫夫曼树对编码后的字符串进行译码,并输出译码结果。5、打印

2、(Print):以直观的方式打印赫夫曼树(选作)6、计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼编码的压缩效果。测试数据:IlovedataStructure,IloveComputer。IwilltrymybesttostudydataStructure.2.程序分析2.1存储结构用二叉树的结构建立哈夫曼树,每个节点的结构是structHNode{intweight;intparent;intlch;intrch;stringcode;chardata;};weightparentlchrchcodedata哈夫曼树的特点:只有度为2的结点

3、和叶子结点,所以具有n个叶子结点的哈夫曼树的结点总数为2n-1顺序存储结构:设置一个的HTree[2*n-1]数组2.2关键算法分析建立哈夫曼树编码解码关键算法一:初始化伪代码:1.将存字符串权值的数组a赋0值,字符种类n赋0值2.获取输入字符串3.遍历输入的字符串,若某个字符出现一次,则在a[i]++,i为该字符ascii码4.遍历a数组,在a[i]有值的地方给HTree[i].weight赋值为a[i],HTree[i].data赋值为ascii码为i的字符源代码:voidHuffman::Init()//初始化{for(intm=0;m<256;++m

4、)a[m]=0;cout<<"请输入想要编码的字符"<

5、ree[j].data=char(k);j++;}}}时间复杂度:若输入的字符串长度为n,则时间复杂度为O(n)关键算法二:编码:思想(不等长编码)使用频率高的字符,编码长度短;使用频率低的字符,编码长度长;利用不等长编码,可以使报文总长度较短,这也是文件压缩技术的核心。1.取当前结点=叶结点2.取当前结点的父结点2.1如果叶结点是左孩子,编码0否则,编码12.2当前结点=父结点反复执行,直到当前结点是根结点。生成哈夫曼编码源代码:voidHuffman::Encode()//编码{cout<<"各字符编码,总编码分别为:"<

6、;i

7、code);}inti=0;while(!HTree[i].code.empty()){cout<

8、读取编码串2.从根结点开始,如果是0,则选择左支;如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。