目录

1. 数据结构树–>树基础
2. 数据结构树–>二叉树
3. 数据结构树–>二叉查找树\二叉排序树
4. 数据结构树–>平衡二叉树
5. 数据结构树–>霍夫曼树
6. 数据结构树–>红黑树
7. 数据结构树–>二叉堆
8. 数据结构树–>B树
9. 数据结构树–>B+树

霍夫曼树

1. 霍夫曼树的定义

霍夫曼树又称最优二叉树。了解霍夫曼树之前先了解几个名词,

  1. 节点的权:若将树中的节点赋给一个有某种含义的值,这个值称为节点的权。
  2. 路径:从一个节点到另一个节点之间的分支构成两个节点之间的路径。
  3. 路径的长度:路径上的分支数量。
  4. 树的路径长度:从树的根到树中每一个节点的路径长度之和。
  5. 节点的带权路径长度:从该节点到树根之间的路径长度与节点上权的乘积。
  6. 树的带权路径长度:树中所有叶子节点的带权路径长度之和。

上图是个霍夫曼树,其中。

  1. 节点的权: A:7 B:5 C:2 D:4.
  2. 路径: 数字4旁边的线就是路径。
  3. 树的路径长度: 1 + 1 + 2 + 2 + 3 + 3
  4. 节点带权的路径长度: B节点为 : 5 x 2 = 10
  5. 树的带权路径长度: 7 + 5x2 + 2x3 + 4x3

**霍夫曼树定义:**给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为夫曼树(Huffman Tree)。

2. 构造霍夫曼树

根据霍夫曼树的特性我们可以知道,权值越大的叶子节点越靠近根节点。

这里构造霍夫曼树的方法称之为霍夫曼算法。

算法:

输入:权值为(w1,w2,…wn)的n个节点

输出:对应的霍夫曼树

过程:

  1. 将(w1,w2,…wn)看做是有n棵树的森林,每个树仅有一个节点.
  2. 在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和.
  3. 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林.
  4. 重复 步骤2 和 3 直到森林里只有一棵树为止

3. 霍夫曼树的使用

霍夫曼树应用于通讯及数据传送中对信息的二进制编码。

数据结构树-->霍夫曼树相关推荐

  1. 数据结构(六)霍夫曼树与编码

    1.算法流程 (1)构建霍夫曼树:自底向上 根据统计频率构建霍夫曼树: A.把所有的节点扔进排序队列queue中: B.从queue选择选择前面两个最小的元素a.b,把最小的树a作为左节点,把最小的b ...

  2. 数据结构与算法之Huffman tree(赫夫曼树 / 霍夫曼树 / 哈夫曼树 / 最优二叉树)

    目录 赫夫曼树概述 定义 构造赫夫曼树步骤 代码实现 赫夫曼树概述 HuffmanTree因为翻译不同所以有其他的名字:赫夫曼树.霍夫曼树.哈夫曼树 赫夫曼树又称最优二叉树,是一种带权路径长度最短的二 ...

  3. 快速画出哈夫曼树/霍夫曼树/最优树

    2019独角兽企业重金招聘Python工程师标准>>> 哈夫曼树(霍夫曼树)又称为最优二叉树. n个叶子结点的哈夫曼树共有几个结点 ? Huffman 树是所谓的正则二叉树,只有度为 ...

  4. 数据结构之二叉树,二叉树存储结构,二叉树遍历,霍夫曼树以及图解

    数据结构之二叉树 树 什么是树? 树是一种一对多的数据结构.树有很多子集,比如:二叉树.完全二叉树.满二叉树.二叉搜索树等等. 树的特征: 没有父结点的叫做根,一个树有且只有一个根: 每个结点有0个或 ...

  5. Python实现霍夫曼树

    Python实现霍夫曼树 霍夫曼树是一种特殊的二叉树,是一种带权路径长度最短的二叉树,又称为最优二叉树. 给定 N 个权值作为二叉树的 N 个叶节点的权值,构造一棵二叉树,若该二叉树的带权路径长度达到 ...

  6. 霍夫曼树(赫夫曼树、哈夫曼树)

    霍夫曼树:给定n个权值做为n个叶子节点,若该树的带权路径长度达到最小,这棵树为最优二叉树,也称赫夫曼树. 霍夫曼树中的几个概念 路径和路径长度 一棵树中,一个节点往下可以达到的孩子或孙子节点之间的通路 ...

  7. Huffman霍夫曼树,霍夫曼编码

    霍夫曼树基本概念: 路径:从一个结点往下到孩子或孙子结点之间的同理 路径长度:如结点1到结点7的路径长度=2 结点的权:将结点的某一属性值作为结点的权 带权路径长度:从根节点到该结点*该结点的权:如结 ...

  8. c语言霍夫曼函数,使用C语言详解霍夫曼树数据结构

    1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,--,kj, 使得 ki是ki+1 的双亲(1<=i 从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它 ...

  9. 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码

    一. 诞生原因 找出存放一串字符所需的最少的二进制编码. 二. 构造方法 首先统计出每种字符出现的频率,即:概率.权值. 例如:频率表 A:60,    B:45,   C:13   D:69   E ...

最新文章

  1. OpenCV-Python绑定如何工作及如何扩展新模块到Python
  2. ab压力测试: apr_socket_recv: Connection timed out (110)
  3. Hadoop多次format格式化会导致节点的clusterID不一致
  4. html列表按时间排序代码_按字母顺序排序的列表
  5. html5 canvas签字,HTML5 canvas实现电子签名
  6. linux 火狐无法执行二进制文件_Linux无法执行二进制文件
  7. 脚注交叉引用序号不一样_利用Word的尾注来做参考文献的注释编号--解决编号加方括号,交叉引用,去除尾注上访横线等问题...
  8. 互联网公司2014前端笔试面试题:HTML/CSS篇
  9. vscode之调试es6代码
  10. iOS运行出现No application was specified.
  11. 绿色版DNF(地下城勇士)全键盘连发工具,支持DNF双开
  12. android 计算器边框,Android计算器——入门
  13. 笨方法学Python笔记(5)
  14. 单片机 C语言 读引脚,单片机引脚读写操作
  15. python获取实时基金数据_Python实现基金实时净值抓取
  16. java中类何时被加载_java类在何时被加载
  17. latex 符号以及命令
  18. jsf服务_JSF ManagedBean ManagedProperty
  19. 跟着鹏哥学C语言第一天
  20. 微信订阅号推广只要这一个标题就够了!

热门文章

  1. MySQL必会单词(一)
  2. POJ - 昂贵的聘礼(最短路)
  3. uni-app设置华为荣耀手机真机调试
  4. 2021.1.4--我的20岁生日感悟
  5. protostuff java_protostuff
  6. 卡莱特led显示屏调试教程_卡莱特A接收卡调屏步骤
  7. WordPress SEO教程:让你的网站排名更高和速度更快的101个优化技巧(2019年完整指南)
  8. 二维码框架Zxing的使用及自定义
  9. jquery获取所有的兄弟元素
  10. 我年薪60W,浑身没有超过100块的衣服:存钱,才是最顶级的自律