数据结构树-->霍夫曼树
目录
1. 数据结构树–>树基础
2. 数据结构树–>二叉树
3. 数据结构树–>二叉查找树\二叉排序树
4. 数据结构树–>平衡二叉树
5. 数据结构树–>霍夫曼树
6. 数据结构树–>红黑树
7. 数据结构树–>二叉堆
8. 数据结构树–>B树
9. 数据结构树–>B+树
霍夫曼树
1. 霍夫曼树的定义
霍夫曼树又称最优二叉树。了解霍夫曼树之前先了解几个名词,
- 节点的权:若将树中的节点赋给一个有某种含义的值,这个值称为节点的权。
- 路径:从一个节点到另一个节点之间的分支构成两个节点之间的路径。
- 路径的长度:路径上的分支数量。
- 树的路径长度:从树的根到树中每一个节点的路径长度之和。
- 节点的带权路径长度:从该节点到树根之间的路径长度与节点上权的乘积。
- 树的带权路径长度:树中所有叶子节点的带权路径长度之和。
上图是个霍夫曼树,其中。
- 节点的权: A:7 B:5 C:2 D:4.
- 路径: 数字4旁边的线就是路径。
- 树的路径长度: 1 + 1 + 2 + 2 + 3 + 3
- 节点带权的路径长度: B节点为 : 5 x 2 = 10
- 树的带权路径长度: 7 + 5x2 + 2x3 + 4x3
**霍夫曼树定义:**给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为夫曼树(Huffman Tree)。
2. 构造霍夫曼树
根据霍夫曼树的特性我们可以知道,权值越大的叶子节点越靠近根节点。
这里构造霍夫曼树的方法称之为霍夫曼算法。
算法:
输入:权值为(w1,w2,…wn)的n个节点
输出:对应的霍夫曼树
过程:
- 将(w1,w2,…wn)看做是有n棵树的森林,每个树仅有一个节点.
- 在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和.
- 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林.
- 重复 步骤2 和 3 直到森林里只有一棵树为止
3. 霍夫曼树的使用
霍夫曼树应用于通讯及数据传送中对信息的二进制编码。
数据结构树-->霍夫曼树相关推荐
- 数据结构(六)霍夫曼树与编码
1.算法流程 (1)构建霍夫曼树:自底向上 根据统计频率构建霍夫曼树: A.把所有的节点扔进排序队列queue中: B.从queue选择选择前面两个最小的元素a.b,把最小的树a作为左节点,把最小的b ...
- 数据结构与算法之Huffman tree(赫夫曼树 / 霍夫曼树 / 哈夫曼树 / 最优二叉树)
目录 赫夫曼树概述 定义 构造赫夫曼树步骤 代码实现 赫夫曼树概述 HuffmanTree因为翻译不同所以有其他的名字:赫夫曼树.霍夫曼树.哈夫曼树 赫夫曼树又称最优二叉树,是一种带权路径长度最短的二 ...
- 快速画出哈夫曼树/霍夫曼树/最优树
2019独角兽企业重金招聘Python工程师标准>>> 哈夫曼树(霍夫曼树)又称为最优二叉树. n个叶子结点的哈夫曼树共有几个结点 ? Huffman 树是所谓的正则二叉树,只有度为 ...
- 数据结构之二叉树,二叉树存储结构,二叉树遍历,霍夫曼树以及图解
数据结构之二叉树 树 什么是树? 树是一种一对多的数据结构.树有很多子集,比如:二叉树.完全二叉树.满二叉树.二叉搜索树等等. 树的特征: 没有父结点的叫做根,一个树有且只有一个根: 每个结点有0个或 ...
- Python实现霍夫曼树
Python实现霍夫曼树 霍夫曼树是一种特殊的二叉树,是一种带权路径长度最短的二叉树,又称为最优二叉树. 给定 N 个权值作为二叉树的 N 个叶节点的权值,构造一棵二叉树,若该二叉树的带权路径长度达到 ...
- 霍夫曼树(赫夫曼树、哈夫曼树)
霍夫曼树:给定n个权值做为n个叶子节点,若该树的带权路径长度达到最小,这棵树为最优二叉树,也称赫夫曼树. 霍夫曼树中的几个概念 路径和路径长度 一棵树中,一个节点往下可以达到的孩子或孙子节点之间的通路 ...
- Huffman霍夫曼树,霍夫曼编码
霍夫曼树基本概念: 路径:从一个结点往下到孩子或孙子结点之间的同理 路径长度:如结点1到结点7的路径长度=2 结点的权:将结点的某一属性值作为结点的权 带权路径长度:从根节点到该结点*该结点的权:如结 ...
- c语言霍夫曼函数,使用C语言详解霍夫曼树数据结构
1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,--,kj, 使得 ki是ki+1 的双亲(1<=i 从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它 ...
- 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码
一. 诞生原因 找出存放一串字符所需的最少的二进制编码. 二. 构造方法 首先统计出每种字符出现的频率,即:概率.权值. 例如:频率表 A:60, B:45, C:13 D:69 E ...
最新文章
- OpenCV-Python绑定如何工作及如何扩展新模块到Python
- ab压力测试: apr_socket_recv: Connection timed out (110)
- Hadoop多次format格式化会导致节点的clusterID不一致
- html列表按时间排序代码_按字母顺序排序的列表
- html5 canvas签字,HTML5 canvas实现电子签名
- linux 火狐无法执行二进制文件_Linux无法执行二进制文件
- 脚注交叉引用序号不一样_利用Word的尾注来做参考文献的注释编号--解决编号加方括号,交叉引用,去除尾注上访横线等问题...
- 互联网公司2014前端笔试面试题:HTML/CSS篇
- vscode之调试es6代码
- iOS运行出现No application was specified.
- 绿色版DNF(地下城勇士)全键盘连发工具,支持DNF双开
- android 计算器边框,Android计算器——入门
- 笨方法学Python笔记(5)
- 单片机 C语言 读引脚,单片机引脚读写操作
- python获取实时基金数据_Python实现基金实时净值抓取
- java中类何时被加载_java类在何时被加载
- latex 符号以及命令
- jsf服务_JSF ManagedBean ManagedProperty
- 跟着鹏哥学C语言第一天
- 微信订阅号推广只要这一个标题就够了!