已知字符集{a,b,c,d}的权值集合为{7,5,1,2},构造哈夫曼树,并求出字符集的哈夫

3.设有字符集S={A,B,C,E,F,G},权值集合W={2,4,7,9,6,11},对字符集合根据对应权值集合进行哈夫曼编码.(1)画出构造的哈夫曼树;(2)计算哈夫... 3. 设有字符集S={A,B,C,E,F,G},权值集合W={2,4,7,9,6,11},对字符集合根据对应权值集合进行哈夫曼编码.
(1) 画出构造的哈夫曼树;
(2) 计算哈夫曼树带权路径长度;
(3) 求各字符的哈夫曼编码.
用Java写,谢谢
展开
 我来答
帐号已注销
2020-12-01 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:163万
展开全部

在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;从森林中删除选取的两棵树,并将新树加入森林。

树的路核拦敏径长度衡举是从树根到每一结点的路径长度之和;

WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。

A-B合并(权5)

A-B再和C合并(权10)

D-E合并(权16)

(A-B)-C再和F合并(权21)

最后((A-B)-C)-F再和D-E合并(权37)

总之是找两个最小的结点合并,生成的新节点权为两个结点权之和。

平均路径长度为(2×3+3×3+5×2+7×1+9×1+12×1)/6=53/6约等于8.8

各字符Huffman编码可以为:A-0000 B-0001 C- 001 D-10 E-11 F-01

扩展资改枝料:

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:

(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

(3)从森林中删除选取的两棵树,并将新树加入森林;

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

参考资料来源:百度百科-哈夫曼树

远宏012
高粉答主

2020-12-16 · 说的都是干货,快来关注
知道小有建树答主
回答量:474
采纳率:100%
帮助的人:6.8万
展开全部

在森林中烂腔渗选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;从森林中删除选取的两棵树,并将新树加入森林。

树的路径长度是从树根到每一结点的路径长度之和;

WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。

扩展资料:

(1)结合w1,W2,…视Wn为有N棵树的森林(每棵树只有一个节点);

(2)选择森林中两个根节点权值最小的树进行合并,作为新树的左右子树,新树的根权值圆雀为其左右子树权值之和;

(3)将选定的两棵树从森林中删除,并将新树添加到森林中;饥脊

(4)重复步骤(2)、(3),直到森林中只剩下一棵树,即获得的Huffman树

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虢尚经诗柳
2020-04-23 · TA获得超过1074个赞
知道小有建树答主
回答量:1516
采纳率:90%
帮助的人:6.9万
展开全部
要写出完整的哈夫曼编码?我给你算这3个问题的答案行不,写代码20分好少的说
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式