(完整word版)哈夫曼树实验报告.docxVIP

  • 116
  • 0
  • 约7.95千字
  • 约 10页
  • 2020-12-13 发布于山东
  • 举报
实验报告 1、实验目的 : 理解哈夫曼树的含义和性质。 掌握哈夫曼树的存储结构以及描述方法。 掌握哈夫曼树的生成方法。 掌握哈夫曼编码的一般方法,并理解其在数据通讯中的应用。 2、实验内容 : 哈夫曼树与哈弗曼编码、译码 问题描述: 哈夫曼问题的提出可以参考教材P.145. 利用哈弗曼编码进行通信可以大大提高通信利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。 b. 算法提示: 参见教材 P.147-148 算法 6.12 、6.13 的描述。 3、实验要求 : 建立哈夫曼树,实现编码,译码。 1 . 初始化( Initialization )。从终端读入字符集大小 n,以及 n 个字符和 n 个权值, 建立哈夫曼树, ○ 并将它存于文件 hfmTree 中。 2 . 编码( Encoding )。利用已建好的哈夫曼树(如不在内存,则从文件 hfmTree 中读入),对文件 ○ ToBeTran 中的正文进行编码,然后将结果存入文件 CodeFile 中。 ○3 . 译码( Decoding ) 。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文件 TextFile 中。 ○4 . 输出代码文件( Print )。将文件 CodeFile 以紧凑格式显示在终端上,每行 50 个代码。同时将此 字符形式的编码文件写入文件 CodePrint 中。 ○5 . 输出哈夫曼树( TreePrinting )。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显 示在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint 中。 测试数据: 设权值 c= (a, b, c, d , e, f, g, h) w=( 5, 29, 7, 8, 14, 23,3, 11),n=8。 按照字符‘ 0’或‘ 1’确定找左孩子或右孩子,则权值对应的编码为: : 0001,29: 11, 7: 1110, 8: 1111 : 110,23: 01, 3: 0000, 11: 001 。 四实验代码 #include iostream.h #include stdio.h #include iomanip.h typedef struct #include string.h { #include malloc.h int weight,K; 第 页 共 页 int parent,lchild,rchild; for (;i=j;i++) }HTNode,* HuffmanTree; if ((HT[i].parent==0)(i!=*s1)(HT[i].weight typedef char **HuffmanCode; HT[*s2].weight)) char str[50]; *s2=i; int wa[50]; HuffmanTree HT; } HuffmanCode HC; // -------------- 算 法 int w[50],i,j,n=8; 6.12-------------------------- char z[50]; void HuffmanCoding(HuffmanTree int flag=0; HT,HuffmanCode HC,int *w,int n) int numb=0; { // ----------------- 求 哈 夫 曼 编 码 int m,i,s1,s2,start; ----------------------- struct cou { int c,f; char data; HuffmanTree p; int count; char *cd; }cou[50]; if(n=1) void select(HuffmanTree HT,int j,int *s1,int return;// 检测结点数是否可以构成树 *s2) m=2*n-1; { int i; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode) // 找 weight 最小的结点 ); for (i=1;i=j;i++) for(p=HT+1,i=1;i=n;i++,p++) if (HT[i].parent==0) { {*s1=i;break;} p-weight=wa[i-1]; for (;i=j;i++) p-parent=0; if p-lchild=0; ((HT[i].parent==0)(HT[i].weightHT[*s1].w p-rchild=0; eight)) } *s1=i; for(;i=m;++i,++p) HT[*s1].p

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档