赫夫曼树,别名“哈夫曼树”、“最优树”以及“最优二叉树”。

概念:

  • 路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。
    (从根结点到结点 a 之间的通路就是一条路径。)

  • 路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。
    (在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1 。图 中从根结点到结点 c 的路径长度为 3)

  • 结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。
    (图中结点 a 的权为 7,结点 b 的权为 5。)

  • 结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积。
    (图中结点 b 的带权路径长度为 2 * 5 =10 )

  • 树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL” 。(图中所示的这颗树的带权路径长度为:WPL = 7 * 1 + 5 * 2 + 2 * 3 + 4 * 3)

赫夫曼树(最优二叉树)

假设有n个权值(ω1,ω2,…ωn),试构造一棵有n个叶子结点的二叉树,每个叶子结点的带权为ωi(有多少种方式?)
其中:带权路径长度WPL最小的二叉树称作赫夫曼树。

构造:
对于给定的有各自权值的 n 个结点,构建哈夫曼树有一个行之有效的办法:

1.在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和;
2.在原有的 n个权值中删除那两个最小的权值,同时将新的权值加入到 n–2 个权值的行列中
以此类推; 重复 1 和 2,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树。

赫夫曼树的特点

  • 权值越大的结点,距离根结点越近。
  • 树中没有度为1的结点,这类树又叫做正则(严格)二叉树。
  • 树的带权路径长度最短。

赫夫曼编码

  • 前缀编码:任一个字符的编码都不是另一个字符的编码的前缀。
  • 由赫夫曼树得到的平均长度最短的二进制前缀编码
  • 平均长度最短:源于赫夫曼树保证了WPL(带权路径长度之和)最小
  • 从赫夫曼树的根结点到每一个叶子结点的路径,都可以等价为一段二进制编码。


为什么不能用二叉树代替赫夫曼树构造前缀码?

  • 由赫夫曼树的特性知:赫夫曼树的带权路径长度是最短的,赫夫曼编码过程中,每个字符的权值都是在字符中出现的次数,路径长度即为每个字符编码的长度,出现次数最多的字符编码长度越短,因此整个字符串被编码后的前缀码长度最短——赫夫曼编码产生的是最短前缀码。

例:对于n(n≥2)个权值均不相同的字符构成的哈夫曼树,关于该树的叙述中,错误的是(B)

   A. 该树一定是一棵完全二叉树B. 树中一定没有度为1的结点C. 树中两个权值最小的结点一定是兄弟结点D. 树中任一非叶结点的权值,一定不小于下一层任一结点的权值

解析:

哈夫曼树为带权路径长度最小的二叉树,不一定是完全二叉树。
哈夫曼树中没有度为1的结点
构造哈夫曼树时,最先选取两个权值最小的结点作为左右子树构造一棵新的二叉树,C正确;
哈夫曼树中任一非叶结点P的权值为其左右子树根结点权值之和,其权值不小于其左右子树根结点的权值,在与结点P的左右子树根结点处于同一层的结点中,若存在权值大于结点.P权值的结点Q,那么结点Q的兄弟结点中权值较小的一个应该与结点P作为左右子树构造新的二叉树。综上可知,哈夫曼树中任一非叶结点的权值一定不小于下一层任一结点的权值。

例:下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是 (D)

   A. 24, 10, 5和24, 10, 7  B. 24, 10, 5和24, 12, 7C. 24, 10, 10和24, 14, 11     D. 24, 10, 5和24, 14, 6

解析:

哈夫曼树是带权路径长度最短的二叉树。由根节点出发到两个叶子节路径中,第二个被访问的两个结点的权值要么相等,要么和为根节点的权值,故B项错误。同理,通过第三个被访问的节点排除A项。
由两条路径可推出三个叶子节点的权值分别是:3、10和11,而根据哈夫曼树的定义可知,权值为3的节点应该和权值为10的结点结合,故C项错误。
D项,反推出有四个叶子节点,权值分别为:5、5、6和8,满足哈夫曼树的条件。

例: 已知字符集{a, b, c, d, e, f},若各字符出现的次数分别为6, 3, 8, 2, 10, 4, 则对应字符集中各字符的哈夫曼编
码可能是()

   A. 00, 1011, 01, 1010, 11, 100B. 00, 100, 110, 000, 0010, 01 C. 10, 1011, 11, 0011, 00, 010D. 0011, 10, 11, 0010, 01, 000

解析:

任一个字符的编码都不是另一个字符的编码的前缀。

赫夫曼树(Haffman)及其运用相关推荐

  1. 赫夫曼树的原理和构建

    赫夫曼树的原理和构建 1. 赫夫曼树的构造 给定N个权值分别为w1, w2, -, Wn的节点.构造赫夫曼树的算法描述如下: ​ 1)将这N个结点分别作为N棵树仅含一个结点的二叉树,构成森林F. ​ ...

  2. java振动数据压缩_【数据结构-Java】最佳实践-数据压缩(使用赫夫曼树)

    一.需求 将给出的一段文本,比如 "i like like like java do you like a java" , 根据前面的讲的赫夫曼编码原理,对其进行数据压缩处理 二. ...

  3. 赫夫曼编码(基于赫夫曼树的实现)

    上一篇文章中我们探讨了赫夫曼树的基本原理和构造方式,而赫夫曼编码可以很有效地压缩数据(通常可以节约20%-90%的空间,具体压缩率依赖于数据的特性). 名词:定长编码,边长编码,前缀码(装B用的) 定 ...

  4. 赫夫曼树(哈夫曼树)

    赫夫曼树->赫夫曼编码 在数据膨胀.信息爆炸的今天,数据压缩的意义不言而喻. 一个字节8位 赫夫曼编码压缩-无损压缩 可以看成成绩的排布.成绩是70-90之间占有70%,所以以下两个数据结构优化 ...

  5. 三十、赫夫曼树的设计与代码实现

    一.基本介绍 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍 ...

  6. php 二叉树 与赫夫曼树

    在学习图之前,中间休息了两天,感觉二叉树需要消化一下.所以中间去温习了下sql,推荐一本工具书<程序员的SQL金典>看名字不像一本好书,但是作为一个不错的SQL工具书还是可以小小备忘一下. ...

  7. 【赫夫曼树详解】赫夫曼树简介及java代码实现-数据结构07

    赫夫曼树(最优二叉树) 1. 简介 定义: 赫夫曼树是n个带权叶子结点构成的所有二叉树中,带权路径长度(WPL)最小的二叉树. 叶子结点的带权路径: 叶子结点权值*到根节点的路径长度(叶结点的层数) ...

  8. 算法系列之赫夫曼树的精解【构造流程及原理分析】

    赫夫曼树又称为最优树.最优二叉树 赫夫曼树百度百科 https://baike.baidu.com/item/%E5%93%88%E5%A4%AB%E6%9B%BC%E6%A0%91/2305769? ...

  9. 数据结结构学习 ---赫夫曼树

    ------ 赫夫曼树和赫夫曼编码的存储表示------ typedef struct {unsigned int weight;unsigned int parent,lchild,rchild; ...

最新文章

  1. 【UER #8】打雪仗
  2. C++ Primer 5th笔记(chap 13 拷贝控制) 实例1测试和结果分析
  3. 用NFS挂载root出现:NFS: failed to create MNT RPC client, status=-101(-110)
  4. linux日常管理-防火墙selinux
  5. gateway路由网关,zuul的替代品
  6. 分布式devops_维护分布式团队的DevOps心态的10个技巧
  7. 大数据与大量数据处理_我们如何处理和使用如此大量的数据?
  8. 2011年8月5日星期五
  9. 计算机网络使用双绞线连接时,计算机网络技术期末试卷A
  10. 自动化测试框架selenium+java+TestNG——配置篇
  11. java中list、set和map 实例
  12. 在线看Android系统源码,相见恨晚的几种方案
  13. 列表查询组件代码, 简化拼接条件SQL语句的麻烦
  14. 181029每日一句
  15. Java写的斗地主游戏源码
  16. CentOS7下MariaDB安装及配置
  17. 服务器共享文件设成禁止删除,服务器共享文件夹权限 禁止删除共享文件方法...
  18. js:写一个函数实现任意数组的翻转
  19. 微信扫描二维码-电脑上网
  20. Zoom and pan, introduction to FabricJS part 5(缩放和平移,介绍Fabric.js第五部分)

热门文章

  1. 深入分析Luminati住宅代理的特点和性能
  2. ENDNOTE使用方法
  3. 数学模型之整数规划(0-1规划)
  4. 用java实现简单的银行管理系统
  5. soot 简介 | 安装运行
  6. DoTween延时办法
  7. 2022年上海应届生落户政策!没有社保基数要求,能直接落户!
  8. android的IBINDER机制
  9. Comparable Comparator的区别
  10. photoswiper