已知五个节点的权值是4,6,1,13,7,画出哈夫曼树并求出其带权路径长度
- 教育综合
- 2022-09-08 07:56:19
已知节点abcde的权值分别为12322,请构造以此五个节点作为叶子的哈夫曼树
哈夫曼树
10
/ \
4 6
/ \ / \
2 2 3 3
/ \
1 2
给出5个权值{1,2,5,6,7},请画出所构成的哈夫曼树
五个权值是12567
(1)从小到大排序12567(这是有序序列)
(2)每次提取最小的两个结点,取结点1和结点2,组成新结点N3,其权值=1+2=3,
取数值较小的结点作为左分支,结点1作为左分支,而结点2就作为右分支.
(3)将新结点N3放入有序序列,保持从小到大排序:
N3567
(4)重复步骤(2),提取最小的两个结点,N3与结点5组成新结点N8,其权值=3+5=8,
N3数值较小,作为左分支,而结点5就作为右分支.
(5)将新结点N8放入有序序列,保持从小到大排序:
67N8
(6)重复步骤(2),提取最小的两个结点,结点6与结点7组成新结点N13,其权值=6+7=13,
结点6的数值较小,作为左分支,结点7就作为右分支.
(7)将新结点N13放入有序序列,保持从小到大排序:
N8N13
(8)重复步骤(2),提取剩下的两个结点,N8与N13组成新结点N21,其权值=8+13=21,
数值较小的N8作为左分支,N13就作为右分支.
最后得到"哈夫曼树":
N21
/\
N8N13
/\/\
N3567
/\
12
哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
得出所有结点的哈夫曼编码:
权值7:11
权值6:10
权值5:01
权值2:001
权值1:000
哈夫曼树的带权路径长度是:
7*2+6*2+5*2+2*3+1*3=45
{4,5,6,7,8}作为权值构造Huffman树,带权路径长度?
先是4和5合并为9,再就是6和7合并为13,接着是8和9合并为17,最后是13和17合并为30,所以WPL = (6+7+8)*2 + (4+ 5)*3= 69。
例如:
假设有n个权值,则构造出的哈夫曼树有n个叶子结点,n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林。
扩展资料:
哈夫曼动态编码:动态哈夫曼编码使用一棵动态变化的哈夫曼树,对第t+1个字符的编码是根据原始数据中前t个字符得到的哈夫曼树来进行的,编码和解码使用相同的初始哈夫曼树,每处理完一个字符,编码和解码使用相同的方法修改哈夫曼树;
所以没有必要为解码而保存哈夫曼树的信息。编码和解码一个字符所需的时间与该字符的编码长度成正比,所以动态哈夫曼编码可实时进行。
参考资料来源:百度百科-哈夫曼树
画出哈夫曼树计算带权路径长度
在权为wl,w2,…,wn的n个叶子所构成的所有二叉树中,带权路径长度最小(即代价最小)的二叉树称为最优二叉树或哈夫曼树。【例】给定4个叶子结点a,数据结构与算法:以数据集{4,5,6,7,10,12,18}为结点权值所构造的哈夫曼树,其带权路径长度为?
带全路径长度:(4+5)*4+(6+7)*3+10*3+12*2+18*2=165
望采纳!
展开全文阅读