- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
void CreateHT(HTNode ht[],int n) { int i,j,k,lnode,rnode; float min1,min2; for (i=0;i2*n-1;i++) ht[i].parent=ht[i].lchild=ht[i].rchild=0; /*所有结点的相关域置初值或者-1*/ for (i=n;i2*n-1;i++) /*构造哈夫曼树*/ { min1=min2=32767; lnode=rnode=0; /*或者-1*/ for (k=0;k=i-1;k++) if (ht[k].parent==0) /*未构造二叉树的结点中查找或者=-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; } } 赫夫曼树的构造算法 void CreateHCode(HTNode ht[],HCode hcd[],int n) { int i,f,c; HCode hc; for (i=0;in;i++) /*根据哈夫曼树求哈夫曼编码*/ { hc.start=n;c=i; f=ht[i].parent; while (f!=-1) /*循环直到无双亲结点即到达树根结点*/ { if (ht[f].lchild==c) /*当前结点是左孩子结点*/ hc.cd[hc.start--]=0; else /*当前结点是双亲结点的右孩子结点*/ hc.cd[hc.start--]=1; c=f;f=ht[f].parent; /*再对双亲结点进行同样的操作*/ } hc.start++; /*start指向哈夫曼编码最开始字符*/ hcd[i]=hc; } } 根据哈夫曼树求对应的哈夫曼编码的算法如下: 编码的产生 值 a e i s t sp nl 权 58 33 25 18 8 4 10 15 12 3 4 13 1 父 1 1 2 4 5 4 2 3 6 5 3 6 左 2 4 9 5 6 10 右 3 8 12 7 11 13 0 1 2 3 4 5 6 7 8 9 10 11 12 13 生成a的代码:结点4的右孩子(1),结点4是结点2的左孩子(01),结点2是结点1的左孩子(001) 对每个结点,从叶子往根推进,是左枝加0,是右枝加1 哈夫曼树构造实例 为下列符号集生成赫夫曼树及其赫夫曼编码:a(10),e(15), i(12), s(3), t(4), d(13), n(1) int main() { char ch[] = {“aeistdn”}; //编码的字符集 int w[] = {10,15,12,3,4,13,1}; //字符出现的频度(权重值) hfTreechar tree(ch, w, 7); hfTreechar::hfCode result[7]; tree.getCode(result); for (int i=0; i 7; ++i) cout result[i].data result[i
原创力文档


文档评论(0)