一文搞懂如何构造哈夫曼树? 上文介绍了哈夫曼树的基本概念:机器学习入坑者:程序员必备——哈夫曼树的基本概念 哈夫曼树要求所有叶子节点的带权路径最小,那么如何构造这样的树呢? 图说构造方式 首先,对将要使用的符号进行定义:节点数目为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中权值最小的两个节点;使用两个权值最小的节点构建新的节点; 下一篇笔记将会记录哈夫曼树的代码实现,并给出实例进行分析。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/73330.html