- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
bn-1因为在先序遍历过程中访问根节点后
8 W={ 0.05, 0.29, 0.07, 0.08, 0.14, 0.23, 0.03, 0.11} 5 29 7 14 8 15 23 3 11 8 3 5 19 15 7 8 29 42 58 100 用ht[]数组存放哈夫曼树,对于具有n个叶子节点的哈夫曼树,总共有2n-1个节点。树中每个节点结构如下: typedef struct { char data; //节点值 float weight; //权重 int parent; //双亲节点 int lchild; //左孩子节点 int rchild; //右孩子节点 } HTNode; 其算法思路是: 1.n个叶子节点只有data和weight域值,先将所有2n-1个节点的parent、lchild和rchild域置为初值-1。 2.处理每个非叶子节点ht[i](存放在ht[n]~ht[2n-2]中):从ht[0] ~ht[i-2]中找出根节点(即其parent域为-1)最小的两个节点ht[lnode]和ht[rnode],将它们作为ht[i]的左右子树,ht[lnode]和ht[rnode]的双亲节点置为ht[i],并且ht[i].weight= ht[lnode].weight+ht[rnode].weight。 3.如此这样直到所有2n-1个非叶子节点处理完毕。 No weig pare lchi rchi 0 5 -1 -1 1 29 -1 -1 2 7 -1 -1 3 8 -1 -1 4 14 -1 -1 5 23 -1 -1 6 3 -1 -1 7 11 -1 -1 No weig pare lchi rchi 8 9 10 11 12 13 14 -1 -1 -1 -1 -1 -1 -1 -1 1 15 4 7 -1 8 8 9 3 -1 9 7 8 -1 19 10 8 9 10 4 5 29 -1 11 11 -1 12 12 10 42 -1 1 11 58 13 13 100 -1 13 12 14 14 8 3 9 9 11 11 3 9 13 13 11 13 14 14 ht[]数组在构造哈夫曼树过程中的变化 void CreateHT(HTNode ht[],int n) { int i,j,k,lnode,rnode; float min1,min2; for (i=0;i2*n-1;i++) //所有节点的相关域置初值-1 ht[i].parent=ht[i].lchild=ht[i].rchild=-1; for (i=n;i2*n-1;i++) //构造哈夫曼树 { min1=min2=32767; lnode=rnode=-1; for (k=0;k=i-1;k++) if (ht[k].parent==-1) //未构造二叉树的节点中查找 { if (ht[k].weightmin1) { min2=min1;rnode=lnode; min1=ht[k].weight;lnode=k; } else if (ht[k].weightmin2) { min2=ht[k].weight;rnode=k; } } //if ht[lnode].parent=i;ht[rnode].parent=i; ht[i].weight=ht[lnode].weight+ht[rnode].weight; ht[i].lchild=lnode;ht[i].rchild=rnode; } } 7.8.3 哈夫曼编码 具体构造方法如下:设需要编码的字符集合为{d1,d2,…,dn},各个字符在电文中出现的次数集合为{w1,w2,…,wn},以d1,d2,…,dn作为叶节点,以w1,w2,…,wn作为各根节点到每个叶节点的权值构造一棵二叉树。 规定哈夫曼树中的左分支为0,右分支为1,则从根节点到每个叶节点所经过的分支对应的0和1组成的序列便为该节点对应字符的编码。这样的编码称为哈夫曼编码。 29 14 23 11 8 3 5 19 15 7 8 29 42 58 100 0 0 0 0 1 0 0 1 0 1 1 1 1 3:0000 5:0001 11:001 7:1000 8:1111 23:01 29:10 14:110 1 为了实现构造哈夫曼编码的算法,设计存放每个节点哈夫曼编码的类型如下: typedef struct
您可能关注的文档
最近下载
- 成人创伤性颅脑损伤院前与急诊诊治中国专家共识解读PPT课件.pptx VIP
- 酒店绿云科技快捷版说明书.docx
- 医案记录精选.docx
- 2025年高考英语全国一卷听力试题真题及答案(含MP3+原文).pdf VIP
- 基于机器学习的疾病预测模型.pptx VIP
- 2015护士资格证考试《专业实务》真题及答案.doc VIP
- 第23课 全民族浴血奋战与抗日战争的胜利 课件(共28张PPT) 2024-2025学年统编版高中历史(必修)中外历史纲要(上).pptx VIP
- 护士资格证专业实务练习题(带答案).docx
- 领导力培训Leadership.ppt VIP
- 2025湘美版美术八年级上册第二单元第1课《图像的魅力》课件.pptx
原创力文档


文档评论(0)