哈夫曼树的构造步骤_哈夫曼树的构造步骤包括

哈夫曼树的构造步骤_哈夫曼树的构造步骤包括一文搞懂如何构造哈夫曼树?上文介绍了哈夫曼树的基本概念:机器学习入坑者:程序员必备——哈夫曼树的基本概念哈夫曼树要求所有叶子节点的带权路径最小,那么如何构造这样的树呢?图说构造方式首先,对将要使用的符号进行定义:

一文搞懂如何构造哈夫曼树?
  上文介绍了哈夫曼树的基本概念:机器学习入坑者:程序员必备——哈夫曼树的基本概念

  哈夫曼树要求所有叶子节点的带权路径最小,那么如何构造这样的树呢?

  图说构造方式

  首先,对将要使用的符号进行定义:节点数目为n;n个节点对应的权值为{w1,w2,…wn};n个节点构成的集合为T={T1,T2,…Tn};

  其中,“n个节点”表示n个叶子节点,也表示根节点,这n个节点都没有左右子树。

  构造的针对的是什么?

  哈夫曼树的构造是针对带权的叶子节点进行的,下图的数字表示节点的权值:哈夫曼树的构造步骤_哈夫曼树的构造步骤包括哈夫曼树的构造步骤_哈夫曼树的构造步骤包括

  构造哈夫曼树的步骤

  (1)选择与合并

  从集合T中选择权值最小的两个节点,即2和3。使用权值最小的两个节点作为左右子树(图中的T1和T2),构造新的树T5,新的树的权值为左右子树权值之和:哈夫曼树的构造步骤_哈夫曼树的构造步骤包括哈夫曼树的构造步骤_哈夫曼树的构造步骤包括

  需要注意的是,使用权值最小的两个节点构建新的树时,应该将权值较小的节点T1作为左子树,权值较大的节点T2作为右子树。(如果T1和T2的权值相同,则将深度较小的作为左子树)

  (2)增加与删除

  从集合T中删除权值最小的两个节点(即T1和T2),然后将新创建的节点加入集合T(即T5)。此时,集合T={T3, T4, T5}。

  经过一次合并以后,集合T的节点数目减一。减少两个节点,新增一个节点。

  (3)重复操作

  不断的重复上述两个步骤,直到集合T只剩下一个元素为止,即最后哈夫曼树的根节点。下面是第二次操作后的节点情况:哈夫曼树的构造步骤_哈夫曼树的构造步骤包括哈夫曼树的构造步骤_哈夫曼树的构造步骤包括

  在第二次合并操作时,集合T删除了权值最小的两个节点(T4和T5),增加了节点T6(T6的权值为T4和T5的权值之和)。此时,集合T元素数目再次减一,T={T3, T6}。

  接下来,是第三次合并操作后的节点情况:哈夫曼树的构造步骤_哈夫曼树的构造步骤包括哈夫曼树的构造步骤_哈夫曼树的构造步骤包括

  在第三次合并以后,集合T仅剩一个元素T7,权值为17。此节点即为哈夫曼树的根节点。

  总结:

  构建哈夫曼树时,各个步骤涉及到了几个非常重要的概念:寻找集合T中权值最小的两个节点;使用两个权值最小的节点构建新的节点;

  下一篇笔记将会记录哈夫曼树的代码实现,并给出实例进行分析。

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/96028.html

(0)
上一篇 2024年 5月 23日 下午7:10
下一篇 2024年 5月 23日

相关推荐

  • 不兼容的指针类型转换_不兼容的指针类型转换器

    不兼容的指针类型转换_不兼容的指针类型转换器C++指针类型间强制转换1 void test02(){ 2 3 //- 4 //float指针相关的强制转换 5 //不同类型的指针变量,在内存中本质上都是一样

    激活谷笔记 2024年 5月 29日
  • vs2010常用快捷键

    vs2010常用快捷键Visual Studio 2022和Visual Studio 2010 是微软开发的集成开发环境(IDE)工具,用于开发和调试各种类型的应用程序。虽然这两个版本都用于开发应用程序,但它们在很多方面有很大

    激活谷笔记 2024年 5月 18日
  • vscode配置c/c++环境报错_配置vscodec++运行环境

    vscode配置c/c++环境报错_配置vscodec++运行环境环境配置:Visual Studio Code 配置C/C++文件debug调试环境昨天有伙伴私信我,为什么我用C语言写的hello world几行代码,在编译器里面报错了呢?然后我让她截个图发我,却发现是她的VScode编译器没有配置好C/C++的编译环

    2024年 5月 8日
  • c++中strcpy函数头文件_c++ strstr头文件

    c++中strcpy函数头文件_c++ strstr头文件C/C++头文件一览 &&string.h中的函数C/C++头文件一览#include <assert.h>    //设定插入点#include <ctype.h>     //字符处理#include <

    激活谷笔记 2024年 5月 23日
  • 如何定义指针数组元素_如何定义指针数组元素类型

    如何定义指针数组元素_如何定义指针数组元素类型C++定义指针数组,数组指针,指针数据https://www.cnblogs.com/warmfrog/p/3695173.htmlC语言或C++中,数组元素全为指针的数组称为指针数组一维

    2024年 5月 29日
  • 下划线______怎么打电脑_表格__________怎么打出来

    下划线______怎么打电脑_表格__________怎么打出来打空格下划线不显示怎么办关于WPS中输入空格后下划线不显示的问题目前接到用户反馈,使用升级后的WPS版本打开文档,并在文档中设置了下划线,发现输入空格后下划线不显示。出现这种情况是由于这些文档并非由WPS创建,而是由微软OFFICE

    2024年 5月 15日
  • overleaf怎么导出tex文件_overleaf如何导出LaTeX代码

    overleaf怎么导出tex文件_overleaf如何导出LaTeX代码Online LaTeX Editor——Overleaf使用(全网最详细过程)在Overleaf在线LaTeX编辑器中,可以使用不同的命令来排版图片,并设置列和列之间的距离。要排版图片,首先需要加载包含图片的graphicx宏包。可以

    激活谷笔记 2024年 5月 8日
  • b树与红黑树的区别_b+树红黑树区别

    b树与红黑树的区别_b+树红黑树区别B树、B+树、红黑树1、B树B树属于多叉树又名平衡多路查找树(查找路径不只两个)规则:(1)排序方式:所有节点关键字是按递增次序排列,并遵循左小右大原则;(2)子节点数:非叶节点的子节点数>1,且<=M ,且M>=2,

    2024年 5月 30日
  • 二叉排序树是用来排序的吗为什么不一样_二叉排序树是用来排序的吗为什么不一样

    二叉排序树是用来排序的吗为什么不一样_二叉排序树是用来排序的吗为什么不一样Python 树表查找_千树万树梨花开,忽如一夜春风来(二叉排序树、平衡二叉排序树)什么是树表查询?借助具有性质的进行关键字查找。本文所涉及到的特殊结构性质的树包括:。。使用上述存储数据时,对其本身对结点之间的关系以及顺序有特殊要求,也得益于这种限制,在查

    2024年 5月 24日
  • 化学里a是什么意思_化学里a是什么意思啊

    化学里a是什么意思_化学里a是什么意思啊有机化学里a键e键是什么化学键啊?三菱翼神车况怎么样耗多少油啊 翼神做工粗糙,厂家为节约成本,配件廉价,轮胎垃圾,急弯明显抓地不足,刹车总泵有点死不断气,性能留有很大的提升空间,2.0MT不改发动机,

    激活谷笔记 2024年 5月 26日
  • ubuntu20.04分区方案Csdn_ubuntu20.04分区方案

    ubuntu20.04分区方案Csdn_ubuntu20.04分区方案ubuntu20.04分区方案 for deeplearning一共分出4个系统分区。 1. 设置efi引导 因为是u盘的uefi启动,因此设置一个efi引导项。 具体参数: 大小: 500到1024mb即可 (视自身的存储空间而定&

    激活谷笔记 2024年 5月 14日
  • 7zip怎么解压文件安装_怎么安装7zip

    7zip怎么解压文件安装_怎么安装7zip7zip怎么解压7z文件?用7zip把文件压缩成7z之后想解压试试,右键7z文件,7zip那一栏有个打开压缩包和提取文件,应该选哪个啊?有什么区别吗?你这里要选“提取文件”“打开压缩包”就像平时我们打开图片一样,是打开一

    2024年 5月 17日
关注微信