哈夫曼树的实现及应用报告

哈夫曼树的实现及应用报告

ID:20848367

大小:306.01 KB

页数:12页

时间:2018-10-17

哈夫曼树的实现及应用报告_第1页
哈夫曼树的实现及应用报告_第2页
哈夫曼树的实现及应用报告_第3页
哈夫曼树的实现及应用报告_第4页
哈夫曼树的实现及应用报告_第5页
资源描述:

《哈夫曼树的实现及应用报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一、设计思想哈夫曼树实现及应用。第一步,统计字母及频数。输入我们想要编码的字母。字母输入后存入数组zimu中,计算出字母的种类n和每类字母出现的次数,依次存入数组Z和数组W中。并将字母出现的次数作为该字母的权值。第二步,构建哈夫曼树。初始化2n-l各结点,然后构建n棵只有根结点的二叉树,并给每个节点赋权值。在所有n个结点中找两个权值最小的结点il和i2,并til和i2没有父结点,将两个结点合并,则他们的父结点k的权值力il和i2两个结点的权值之和。其中父结点k的左子为il和i2中较小的il,右子为i2。之后进入循环,不断地寻找il

2、和i2,不断地将两棵树合并。直到只剩下一棵二叉树。第四步,打印树形哈夫曼树。用递归的方法先序遍历哈夫曼树,并用C记录当前层级。然后用switch语句判断当前层次,并根据层数来输出各行应填充的字符。最终输岀树形哈夫曼树。第五步,根据哈夫曼树进行编码。定义一个用于存放哈夫曼编码的二维数组bianmao选取一个叶子结点,判断是否有父结点,若有则判断是否为父结点的左子,若是则叫数组屮输入0,反之则输入1。依次循环,直到父结点不存在。当所有的叶子结点都记录了哈夫曼编码后,循环结束。第六步,输出哈夫曼编码。按顺序输出数组Z巾的元素,并找到元素

3、在二维数组bianma中对应的哈夫曼编码,然后逆向输出数组中的编码,直到数组Z中元素都输出来。然后输出zimu数组中元素对应的哈夫曼编码。图I哈夫曼树丈现及应用算法流程图三、源代码下妞给岀的是用哈夫曼树实现及应用算法实现的程序的源代码:#ifndefHuffmanTree_H#defineHuffmanTree_HclassHuffmantreeIpublic:intweight,m,g;intparentJchild,rchild,flog;charnode;charZ[26];intW[26];voidSum(charzifu

4、[]);voidHuffmanTree(HuffmantreehuffTree[J);voidBianMa(HuffmantreehuffTree

5、],charzimu

6、

7、);};#cndif#include#include#include"HuffmanTree.h"usingnamespacestd;voidHuffmantree::Sum(charzifu[J)//计算字符串中字符种类的个数及其出现次数(inti,j,k;i=j=0;whilc(zifu[i]){for(k=0;k

8、k++)if(Z

9、k]==zifu

10、i

11、)IW[k]++;break;)if(k==j){Z[j]=zifu[i];W[j++]=1;)i++;1m=j;cout«"该字符串中冇"《m<〈"类字符共"《i«"个。cout«"M表示及出现频率分别为:H«endl;cout«”字符频率,r«endl;for(i=0;i

12、n2=9999;il=i2=0;for(inti=0;i

13、:break;case1:cout«T<

14、setw(24)«setfill(,•)«,<<,T,«setw(5)«setfill(,J)«,J;break;default:break;C++;cout«huffTree[g].weight«MH«huffTree[g].node«endl;

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

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

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