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

数据结构与算法实验报告_3霍夫曼树.doc

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

实验四 数据结构与程序设计专题实验报告 赫夫曼树 学院:物理与电子学院 班级:电信1105班 姓名:刘岩 学号:1404110729 实验报告 一、实验任务 实验题目:数据结构与程序设计专题实验 二、实验内容 实验三:树的基本操作及基于霍夫曼树的编码/译码 (一)实验目的:掌握结构体、指针及二叉树的生成、遍历等操作掌握霍夫曼编码/译码的原理。 (二)基本要求:熟练掌握树的操作。 (三)内容提要:给定一段字符,构建霍夫曼树;根据该树求每个字符的编码,并对该段字符串进行编码;将得到的编码进行译码;基于该霍夫曼树,通过遍历算法来输出该树中的叶子节点。 注:在实现时要求霍夫曼树的左右孩子的大小关系(左孩子节点值小于右孩子节点),在遍历的时候也可以为递归与非递归办法寻找叶子节点。 三、要点分析 题目中涉及的主要知识点: 1、本程序参考霍夫曼算法(由给定的权值构造赫夫曼树): (1)由给定的n个权值{w0, w1, w2, …, wn-1},构造具有n棵二叉树的集合F = {T0, T1, T2, …, Tn-1},其中每一棵二叉树Ti只有一个带有权值wi的根结 点,其左、右子树均为空。 (2)重复以下步骤, 直到F中仅剩下一棵树为止: ① 在F, 做为左、右子树构造一棵 新的二叉树。置新的二叉树的根结点的权值为其左、右子树上根结点的 权值之和。 ② 在F ③ 把新的二叉树加入F 把d1,d2,…, dn 作为叶子结点,把w1,w2,…,wn作为叶子结点 的权,构造赫夫曼树。在赫夫曼树中结点的左分支赋0,右 分支赋1,从根结点到叶子结点的路径上的数字拼接起来就 是这个叶子结点字符的编码。 3、译码的过程是分解电文中的字符串,从根出发,按字符‘0’或‘1’确定找 左孩子或右孩子,直至叶子节点,便求得该子串相应的字符。 四、程序的算法描述 1、所用存储结构: typedef struct HfNode { int weight; int parent,lchild,rchild; }HfNode,*HuffmanTree; //动态分配数组存储霍夫曼树 typedef char **HuffmanCode; //动态分配数组存储霍夫曼编码表 程序中各函数的简要说明: (1)void Select(HuffmanTree HT,int i,int a,int b) 从前i个节点中选择权值最小的两个节点分别存入a,b中。设置a,b两个变量用“打擂台”的方 法求出两个最小值。 (2)void CreatHuffmanTree(HuffmanTree HT,int n,int Weight[]) 根据Weight[53]及Letter[52]中的信息建立具有2n-1个节点的Huffman树。 首先创建有2*n-1 个节点的存储空间,将前n个节点的权值付为对应的Weight[i],双亲结点和左右孩子结点均置 为零。剩余结点的权值、双亲结点和左右孩子结点置为零。之后,i从n+1到2*n-1每次加1, 在HT[1..i-1]中选取parent为零且weight最小的两个节点,将他们的双亲结点置为HT[i]。 (3)void HuffmanCoding(HuffmanTree HT,HuffmanCode HC, int n) 获得n个字符的Huffman码。从叶子节点到根逆向求编码。先求叶子结点的双亲结点,如果该结 点为左孩子,则在Huffman码中从后往前字符置为‘0’;若为右孩子则置为‘1’,直至根节点结 束。 (4)char *HuffmanEncoding(HuffmanCode hc, int n,char Text[],char Letter[]) 对输入文本进行Huffman编码。将要编码的字符串传入函数,截取一个字符,与编码表中的字符 比较,找到对应的huffman码,连接到编码串后,直至所有的字符都读入。 (5)void HuffmanDecoding(HuffmanTree HT, char a[], int n,char Letter[]) 对输入文本进行Huffman解码。从根结点出发,按字符‘0’,‘1’确定找左孩子或右孩子,直至 叶子结点,便求得该子串相应的字符。将所有子串找遍,得译码结果。 (6)int Sta

文档评论(0)

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

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

1亿VIP精品文档

相关文档