第5讲 树 Huffman树.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 树和二叉树( Tree Binary Tree ) 回顾1——二叉树的存储 顺序、二叉链表、三叉链表、静态链表 回顾2——最小值问题 提前介绍:二叉树的应用 5.5 Huffman树及其应用 Huffman树简介: 构造哈夫曼树的基本思想: 构造Huffman树的步骤: 操作要点2:按左0右1对Huffman树的所有分支编号! 例2:假设用于通信的电文仅由8个字母 {a, b, c, d, e, f, g, h} 构成,它们在电文中出现的概率分别为{ 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10},试为这8个字母设计哈夫曼编码。如果用0~7的二进制编码方案又如何? 为清晰起见,重新排序为: w={2, 3, 6, 7, 10, 19, 21, 32} 对应的哈夫曼编码(左0右1): 例3:设字符集为26个英文字母,其出现频度如下表。 Huffman树的类定义(见教材) #include heap.h const int DefaultSize = 20; //缺省权值集合大小 template class E struct HuffmanNode { //三叉链表结点类 E weight; //结点权重 HuffmanNodeE *parent; // 父结点指针 HuffmanNodeE *leftChild, *rightChild; //左、右子女结点指针 HuffmanNode () : Parent(NULL), leftChild(NULL), rightChild(NULL) { } //构造函数 …… }; // HuffmanNode template class E class HuffmanTree { //Huffman树类定义 public: HuffmanTree (E w[], int n); //构造函数 ~HuffmanTree() { delete Tree(root);} //析构函数 void HuffmanCode(char **code) ; // Huffman编码 protected: HuffmanNodeE *root; //树的根 void deleteTree (HuffmanNodeE *t); //删除树 t void mergeTree (HuffmanNodeE ht1, HuffmanNodeE ht2, HuffmanNodeE * parent); //合并 }; 采用静态链表的Huffman树?? 采用静态链表方式存储Huffman树,其类定义如下: const int n = 20; //叶结点个数 const int m = 2*n-1; //结点总数 struct HTNode{ char data; //结点数据,可省 float weight; int parent, lchild, rchild; }; typedef HTNode HuffmanTree[m]; Huffman树建立算法 建立Huffman树的算法 void CreateHuffmanTree (HuffmanTree T, float fr[ ], int n) { Huffman编码算法 void HuffmanCode (HuffmanTree T, char **code,int n) { // 根据Huffman树产生Huffman编码算法 code=new *char[n]; //申请字符串指针组 char *p=new char[n];p[n-1]=‘\0’; //临时存放编码 for (int i = 0; i n; i++) { //确定第n个字符的编码 int k=n-1; for(int j=i; T[j].parent =0; j=T[j].parent){ f= T[j].parent; if(T[f].lchild==j) p[--k]= ‘0’ ;//为左孩子

文档评论(0)

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

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

1亿VIP精品文档

相关文档