已知八个数据,如何画出哈夫曼树?

作者&投稿:繁烁 (若有异议请与网页底部的电邮联系)
~
权值w={5,29,7,8,14,23,3,11},画出哈夫曼树.

个人认为, 图2的画法有不妥的地方.

问题点就是:
结点3和结点5组成新结点N8,那么新结点N8应该排在原有结点8的后面,还是前面?

个人认为,应该按照图1的做法,将新结点N8排在原有结点8的后面.

分析过程如下:

八个权值从小到大排序是: 3 5 7 8 11 14 23 29

图1 : 哈夫曼树

         N100
      /        \
    N42        N58
   /  \       /  \
  23  N19    29  N29
     /  \       /  \
   11   N8     14  N15
       /  \       /  \
      3    5     7    8

根结点N100到结点29的路径长度是2,结点29的带权路径长度是29*2
根结点N100到结点3的路径长度是4,结点3的带权路径长度是3*4
如此类推,哈夫曼树的带权路径长度(WPL)等于
29*2 + 23*2 + 14*3 + 11*3 + 8*4 + 7*4 + 5*4 + 3*4 = 271

哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
权值29: 10
权值23: 00
权值14: 110
权值11: 010
权值8 : 1111
权值7 : 1110
权值5 : 0111
权值3 : 0110


图2 : 哈夫曼树

             N100
         /          \
        N58        N42
       /   \      /   \
      N29  29    N19  23
     /  \       /  \
   14   N15    8   11
       /  \
      7   N8
         /  \
        3    5

根结点N100到结点29的路径长度是2,结点29的带权路径长度是29*2
根结点N100到结点3的路径长度是5,结点3的带权路径长度是3*5
如此类推,哈夫曼树的带权路径长度(WPL)等于
29*2 +23*2 +14*3 +11*3 +8*3 +7*4 +5*5 +3*5  = 271

哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
权值29: 01
权值23: 11
权值14: 000
权值11: 101
权值8 : 100
权值7 : 0010
权值5 : 00111
权值3 : 00110


从 WPL 的角度看,图1和图2的WPL都是等于271.

从 哈夫曼编码 的角度看:
图1, 权值29的编码是10, 权值3的编码是0110 
图2, 权值29的编码是01, 权值3的编码是00110

图2的权值29和权值3的编码长度相差大了一点.

相比下,图1的方案更加合适,所以优先选择图1的哈夫曼树.

图1和图2出现编码差异大的主要原因是:
结点3和结点5组成新结点N8,那么新结点N8应该排在原有结点8的后面,还是前面?
图1的做法是将新结点N8排在原有结点8的后面,所以结点7与原有结点8先合并.
而图2的做法是新结点将N8排在原有结点8的前面,所以结点7和新结点N8先合并了.

个人认为,应该按照图1的做法,将新结点N8排在原有结点8的后面.

另外,个人认为,图1的结点11和N8的左右位置互换一下,结点23和N19左右位置互换一下,
这样会更加合适,保证从左到右,结点是从小到大,让最后编码的时候,更加统一.


以下是详细的构建过程:

(1) 从小到大排序 3 5 7 8 11 14 23 29 (这是有序序列)
(2) 每次提取最小的两个结点,取结点3和结点5,组成新结点N8,其权值=3+5=8,
    取数值较小的结点作为左分支,结点3作为左分支,而结点5就作为右分支.
(3) 将新结点N8放入有序序列,保持从小到大排序:
    7 8 N8 11 14 23 29  [注意,新结点N8排在原结点8的后面]
(4) 重复步骤(2),提取最小的两个结点,结点7与结点8组成新结点N15,其权值=7+8=15,
    结点7的数值较小,将结点7作为左分支,结点8就作为右分支.
(5) 将新结点N15放入有序序列,保持从小到大排序:
    N8 11 14 N15 23 29
(6) 重复步骤(2),提取最小的两个结点,N8与结点11组成新结点N19,其权值=8+11=19,
    N8的数值较小,作为左分支,结点11就作为右分支.
(7) 将新结点N19放入有序序列,保持从小到大排序:
    14 N15 N19 23 29
(8) 重复步骤(2),提取最小的两个结点,结点14与N15组成新结点N29,其权值=14+15=29,
    结点14的数值较小,作为左分支,N15就作为右分支.
(9) 将新结点N29放入有序序列,保持从小到大排序:
    N19 23 29 N29  [注意,新结点N29排在原结点29的后面]
(10)重复步骤(2),提取最小的两个结点,N19与结点23组成新结点N42,其权值=19+23=42,
    N19的数值较小,作为左分支,结点23就作为右分支.
(11)将新结点N42放入有序序列,保持从小到大排序:
    29 N29 N42
(12)重复步骤(2),提取最小的两个结点,结点29与N29组成新结点N58,其权值=29+29=58,
    结点29与N29的数值相同,将原结点29作为左分支,N29就作为右分支.
(13)将新结点N58放入有序序列,保持从小到大排序:
    N42 N58
(14)重复步骤(2),提取剩下的两个结点,N42与N58组成新结点N100,其权值=42+58=100,
    数值较小的N42作为左分支,N58就作为右分支.
    最后得到"哈夫曼树":

              N100
           /       \
          N42      N58
         /   \     /  \
        N19  23   29  N29
       /  \          /  \
      N8  11       14   N15
     /  \              /  \
    3    5            7    8

带权路径长度(WPL):
根结点N100到结点29的路径长度是2,结点29的带权路径长度是29*2
根结点N100到结点23的路径长度是2,结点23的带权路径长度是23*2
根结点N100到结点14的路径长度是3,结点14的带权路径长度是14*3
根结点N100到结点11的路径长度是3,结点11的带权路径长度是11*3
根结点N100到结点8的路径长度是4,结点8的带权路径长度是8*4
根结点N100到结点7的路径长度是4,结点7的带权路径长度是7*4
根结点N100到结点5的路径长度是4,结点5的带权路径长度是5*4
根结点N100到结点3的路径长度是4,结点3的带权路径长度是3*4
所以,哈夫曼树的带权路径长度(WPL)等于
29*2 + 23*2 + 14*3 + 11*3 + 8*4 + 7*4 + 5*4 + 3*4 = 271

哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
从根结点N100到结点29,先经历右分支,再经历左分支,结点29的编码就是10
从根结点N100到结点23,先经历左分支,再经历右分支,结点23的编码就是01
从根结点N100到结点14,经历两次右分支,再经历左分支,结点14的编码就是110
如此类推,得出所有结点的"哈夫曼编码":
权值29: 10
权值23: 01
权值14: 110
权值11: 001
权值8 : 1111
权值7 : 1110
权值5 : 0001
权值3 : 0000



在excel中如何用已知的数据画出函数图?
我们可以自定义一个函数,来完成一些特定的运算。下面,我们就来自定义一个计算梯形面积的函数:1.执行“工具→宏→Visual Basic编辑器”菜单命令(或按“Alt+F11”快捷键),打开Visual Basic编辑窗口。2.在窗口中,执行“插入→模块”菜单命令,插入一个新的模块——模块1。3.在右边的“代码窗口”中...

请教各位cad高手,知道这些数据,请问如何画这三个圆弧
因为没有水平的位置尺寸,所以只能大概的画,都是用圆的相切,相切,半径绘制就可以了。

什么软件可以根据几个数据点画曲线图,再从曲线图中读出未知点数据?
你用excel把已知的几个点输入进去,选中插入折线图,右键折线图,选择展示趋势线就能得到方程了,根据当成就能求解未知数据的x或者y的值了,希望对你有帮助!

matlab中如何画出这些数据的图形,要连续的曲线。
直接使用plot(x,y)命令,默认的连线是实线,不会出现间断部分的!插值是为了在少量的数据中产生更多能够拟合原来趋势的数据序列,使得它们看起来更光滑,意思就是这样了!如果你想插值的话:比如步长为0.5,数据将进扩大两倍(其实少一个)x1=x(1):.5:x(end);y1=interp1(x,y,x1,'spline');pl...

已知一组数据,如何用mathematica模拟函数,并画图
你是要拟合还是单纯的点线图?如果是拟合,就看看FindFit的帮助。如果是点线图,就试试 ListPlot[data]

已知若干个点怎样在Excel中画出曲线图?
选中数据列(行)-点插入-图表-选折线图 需要2列 a列输入x坐标 b列输入y坐标 然后选中ab列-插入-xy散点图 1个xy点对应1个点

知道坐标数据,如何把坐标在CAD上把平面图画出来,
在记事本、Word或Excel把数据按:x,y,h 的格式编写好,每组数据占一行 (同点的两个高程只能选一个)在CAD里选择画点,把编辑好的坐标数据复制粘贴到命令行 注意设置点的样式及大小

已知一组数据画出频数图
答案: 解析: 先统计出表各组中的频数,然后求出频率,最后填写合计表、画图.

如何将Excel折线图横坐标轴的数据画出来呢?
以Excel2016版本为例:1、首先选中数据单元格并点击“插入”选项。2、点击插入图表中的“折线图”,将其插入到表格中。3、右键点击纵坐标轴的位置,选择“设置坐标轴格式”。4、将单位设置为“10”点击回车生成修改。5、然后点击“插入”“形状”中的线条。6、在90和110的位置画出一条横线并设置好...

在Excel中,怎么画直线来表示数据的线性关系?
在Excel中,可以通过“插入”菜单中的“趋势线”选项,在散点图中添加直线。这条直线实际上是基于散点图数据的最佳拟合直线,可以帮助更直观地看出数据的线性关系。1. 首先,你需要有一组已经在Excel表格中输入好的数据。选择这些数据,然后点击“插入”菜单中的“散点图”选项,创建一个散点图。2. ...

零陵区19265022574: 对于给定的8个实数W={8,6,23,15,4,20,35,10};试构造huffman树,并求出每个叶子结点的哈夫曼编码 -
万韩小儿: 我自己用ppt给你做了个演示.Huffman编码的基本规则你肯定懂的,我就简略了.现在规定树枝的左侧都为1,右侧都为0 可以构造Huffman树如下:按顺序从根节点到叶子知:4对应的Huffman编码为:111116的为:111108的为:111020的为:11035的为:1010的为:01115的为:01023的为:00

零陵区19265022574: 由8个权值构造一棵哈夫曼树,该树有几个结点 -
万韩小儿: 一共有15个节点,8个叶子节点和新产生的7个顶点.

零陵区19265022574: 建哈夫曼树及编码,例如:已知某系统在通讯网络中只可能出现8种字符(A、B、C、D、E、F、G、H),其频率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,... -
万韩小儿:[答案] 步骤:一、对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空.(为方便在计算机上实现算 法,一般还要求...

零陵区19265022574: 哈夫曼树编码问题
万韩小儿: 设8个字母依次为:a b c d e f g h 构成由8棵二叉树组成的集合F={a, b, c, d, e, f, g, h},如下图所示,圆圈代表二叉树节点,将字母出现的频率作为每棵二叉树的权重,写在节点的上方.构造哈夫曼树的过程如下: 1、 首先在二叉树集合F中取出...

零陵区19265022574: 哈夫曼编码树怎么解? -
万韩小儿: 先编造哈夫曼树,哈夫曼树构造规则: 假设有n个权值,则构造出的哈夫曼树有n个叶子结点. n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) ...

零陵区19265022574: 请简述哈夫曼树的应用领域.已知字符A B C D E F的权值为8 12 5 20 4 11,请写出构造哈夫曼树的过程,并为这些字符设计哈夫曼编码,一步一步的! -
万韩小儿:[答案] 哈夫曼树的应用领域:数字传输编码压缩.先编造哈夫曼树,哈夫曼树构造规则:假设有n个权值,则构造出的哈夫曼树有n个叶子结点.n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n ...

零陵区19265022574: 已知在一段文字中共有A,B,C,D,E,F,G,H八种字母,它们出现的次数分别是9,3,5,8,12,20,7,10, -
万韩小儿: 已知在一段文字中共有A,B,C,D,E,F,G,H八种字母,它们出现的次数分别是9,3,5,8,12,20,7,10,请...

零陵区19265022574: 给定权值集合:2,5,8,9,15,试画出以权值为叶子结点的哈夫曼树,并计算其带权路径长度及平均长度玩过陈 -
万韩小儿:[答案] 39 15 24 7 (8) (9) (15) (2) (5) 带权长度:3*2+3*5+2*8+2*9+2*15 平均长度:带权长度/(2+5+8+9+15)

零陵区19265022574: 哈夫曼树的建立 -
万韩小儿: 在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码. 首先介绍什么是哈夫曼树.哈夫曼树又称最...

零陵区19265022574: 数据结构哈夫曼树的算法 -
万韩小儿: 每次取最小的2个合并后的值继续加入集合进行比较,直到集合里只有一个数为止,这样就可以达到权值最小的路径越长,权值越大的路径越短,即可以找到最小权值路径

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网