哈夫曼树怎么画(哈夫曼树怎么画编码)
本篇文章给大家谈谈哈夫曼树怎么画,以及哈夫曼树怎么画编码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
哈夫曼树怎么画?
1、先准备一组数字,以1、7、3、4、9、8为例。
2、对这一组数字进行从小到大的规则排序,排序后为1、3、4、7、8、9。
3、在这些数字中,选择两个最小的数字。
4、用类似树杈的“树枝”连接两个最小的数,在顶点处计算出这两个数字的和,比较剩下的数字和这个和的大小,再取出两个最小的数字进行排序。
5、若两个数的和正好是下一步两个最小数其中一个,那么这个树直接往上生长。若两个数的和比较大,不是下一步两个最小数其中一个,那么就并列生长。
6、继续用倒V型的树杈,向上延伸,算出最后一个结果,就证明哈夫曼树构建成功。
哈夫曼树频率和不是100
哈夫曼树频率和必须是100,假设字符集4个字符A,B,C,D的频率分别为45,10,10,35,合起来是100%,那么,我们可以按照哈夫曼树来规划它们。这就是哈夫曼树的定义,望采纳。
给出5个权值{1,2,5,6,7},请画出所构成的哈夫曼树
五个权值是 1 2 5 6 7
(1) 从小到大排序 1 2 5 6 7 (这是有序序列)
(2) 每次提取最小的两个结点,取结点1和结点2,组成新结点N3,其权值=1+2=3,
取数值较小的结点作为左分支,结点1作为左分支,而结点2就作为右分支.
(3) 将新结点N3放入有序序列,保持从小到大排序:
N3 5 6 7
(4) 重复步骤(2),提取最小的两个结点,N3与结点5组成新结点N8,其权值=3+5=8,
N3数值较小,作为左分支,而结点5就作为右分支.
(5) 将新结点N8放入有序序列,保持从小到大排序:
6 7 N8
(6) 重复步骤(2),提取最小的两个结点,结点6与结点7组成新结点N13,其权值=6+7=13,
结点6的数值较小,作为左分支,结点7就作为右分支.
(7) 将新结点N13放入有序序列,保持从小到大排序:
N8 N13
(8) 重复步骤(2),提取剩下的两个结点,N8与N13组成新结点N21,其权值=8+13=21,
数值较小的N8作为左分支,N13就作为右分支.
最后得到"哈夫曼树":
N21
/ \
N8 N13
/ \ / \
N3 5 6 7
/ \
1 2
哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
得出所有结点的 哈夫曼编码:
权值7 : 11
权值6 : 10
权值5 : 01
权值2 : 001
权值1 : 000
哈夫曼树的带权路径长度是:
7*2 + 6*2 + 5*2 + 2*3 + 1*3 = 45
2,3,6,7,14,19,22怎么画成哈夫曼树求解?
哈夫曼树为:
100
/ \
60 40
/ \ / \
28 32 19 21
/ \
11 17
/ \ / \
5 6 7 10
/ \
2 3
编码左子树/为0 右子树\为1
假设有n个值,则构造出的哈夫曼树有n个叶子结点。 n个值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的值最小的树合并,作为一棵新树的左、右子树,且新树的根结点值为其左、右子树根结点值之和;
扩展资料:
哈夫曼树也可以是k叉的,只是在构造k叉哈夫曼树时需要先进行一些调整。构造哈夫曼树的思想是每次选k个权重最小的元素来合成一个新的元素,该元素权重为k个元素权重之和。但是当k大于2时,按照这个步骤做下去可能到最后剩下的元素少于k个。
解决这个问题的办法是假设已经有了一棵哈夫曼树(且为一棵满k叉树),则可以计算出其叶节点数目为(k-1)nk+1,式子中的nk表示子节点数目为k的节点数目。
参考资料来源:百度百科-哈夫曼树
本文到此结束,希望对大家有所帮助。