网站大量收购独家精品文档,联系QQ:2885784924

哈夫曼树实验报告的.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈夫曼树实验报告的

2006级数据结构实验报告 实验名称: 实验三——树 学生姓名: 王璇 班 级: 2009211118 班内序号: 29 学 号:日 期: 2010年12月20日 1.实验要求 利用二叉树结构实现哈夫曼编/解码器 基本要求如下: 初始化:能够对输入的任意长度的字符串s进行统计,统计每个字符的频率,并建立哈夫曼树. 建立编码表:利用已经建好的哈夫曼树进行编码,并将每个字符的编码输出. 编码: 根据编码表对输入的字符串进行编码,并将编码后的字符串输出. 编码:利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出译码结果. 计算输入的字符串编码前和编码后的长度,并进行分析,讨论哈夫曼编码的压缩效果. 2. 程序分析 哈夫曼树类里的成员函数声明如下: class Huffman { private: HNode *HTree;//哈夫曼树 HCode *HCodeTable;//哈夫曼编码表 int num; char aftercode[1000]; int countcode; public: void CreateHTree(int a[],int n);//创建哈夫曼树 void CreateCodeTable(char b[]);//创建编码表 void Encode(char *d);//编码 void Decode(char *d);//解码 ~Huffman(); void SelectMin(int x,int y,int end);//找最小值 void Reverse(char*code);//倒序 int Countcode();//计算编码长 }; 2.1 存储结构 采用数组储存的方法: 建立的哈夫曼树由结点HNode数组组成,每个结点包括结点权值,双亲指针,左右孩子指针. 建立的哈夫曼编码表由结点HCode数组组成,每个结点包括字符值,编码字符数组。 初始化中,包括两个数组,分别储存输入语句字符以及统计的每个字符的次数 2.2 关键算法分析 [内容要求] 1、关键算法:比如插入、删除等基本算法的思想,或是约瑟夫问题的基本思想等,要求使用自然语言描述和伪代码描述,具体可参考书上的伪代码 代码详细分析:比如双链表的插入,需要将4句关键代码写清楚,并画出示意图,可参考书上P69页图2-21。 关键算法的时间、空间复杂度 关键算法1:统计出现过的字符以及相应的次数 Huffman ce; char sentence[100];//统计所有出现过的不同字符 int times[100]={0};//统计相应字符出现的次数 char line[100];//输入的字符串数组 char *afterdecode=new char[100];//在堆里申请的字符数组,用来储存解码后的字符串 char c; cout请输入语句,以@结束endl; int i=0;int j=0;int k=0; cin.getline(line,100,@);//将输入的字符串存在line数组里 do{//统计函数 c=line[k]; if(c!=\nc!=@c!=\0) {j=0;//j为定义的工作指针 while(sentence[j]!=cj=i)//如果读取的字符没有出现 j++;//工作指针后移 if(j==i+1)//如果该字符第一次出现 { sentence[i]=c;//把这个新的字符储存在统计字符数组里 i++;//time的工作指针同样后移 times[i-1]++;}//相应的次数增加1 else//如果在sentence数组里找到了已经存储的该字符 times[j]++;//相应字符的统计次数增加1 k++;} else break;}while(k100c!=@); 统计函数的实现图式如下: 设读取的新字符为M,在sentence里没有,初始时i=2 M sentence a b C j j j j 同时,j后移,i后移 times 1 1 1 1 i i 结束时,i=j=3; 如果插入的字符原本已经存在于sentence,则在相应的统计次数上加1,i的位置不变。 该段代码中,由于在循环中又嵌套了循环,时间复杂度约为O(n2) 关键算法2:在结点中比较出两个最小权值的结点

文档评论(0)

ayangjiayu4 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档