【考试必考点——哈夫曼树】(贪心算法实现)

简介: 一、什么是哈夫曼树当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。二、哈夫曼树相关概念1.路径在一棵树中,一个结点到另一个结点之间的通路,称为路径。

前言

本文针对于考试的应试技巧讲解哈夫曼树

一、什么是哈夫曼树

当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。

二、哈夫曼树相关概念

1.路径

在一棵树中,一个结点到另一个结点之间的通路,称为路径。

2.路径长度

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

3.结点的权

给每一个结点赋予一个新的数值,被称为这个结点的权。

4.结点的带权路径长度

指的是从根结点到该结点之间的路径长度与该结点的权的乘积。

比如下面的例子:假设这是一棵哈夫曼树。


路径:z->a之间的通路叫做路径,z->e的通路也叫路径。


路径长度:z->f中,需要经过两条路径,也就是z->e->f,则z->f的路径长度为2。


节点的权:a节点的权为7,b节点的权为5,e节点无权值。


节点的带权路径长度:节点a的权为7,路径长度为1,则a节点的带权路径长度为1 * 7 = 7,再如b节点的带权路径长度为2 * 5 = 10。

6cc98374302842868f86ddb14303fdc5.png

三、构建一棵哈夫曼树

以该节点为例:

构建哈夫曼树时,用到一个叫做:

贪心算法

即每次都取一个最小的节点和一个次小的节点组成分支


5d7b5ef1e560456f8b02194e927e5fde.png

第一步:取最小的两个节点组成分支,最小节点放在左边,次小节点放在右边,然后生成一个父节点,父节点的val值(不是权值,父节点无权值)是左右两个子节点的权值的和。

4c08e1a6dd0a40dbb892cc50defeb0f1.png

第二步:把该父节点放回列表。


ad473bc7842f4bfa923b03eb5b3da214.png

第三步:重新按照第一步取最小节点和次小节点,最小节点放在左边,次小节点放在右边,然后生成一个父节点,父节点的val值是左右两个子节点的权值的和。

c49d1afbc6e84e44902c66b54aefd913.png

第四步:再次把父节点放回列表,重复第一,第二步,直到列表中没有节点。

最终一棵哈夫曼树生成如下:

f2e1d89101b5440193559a9b97ce106e.png

考点:

1.计算整棵树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL”

例如:上面树的带权路径长度为:WPL = 7 × 1 + 5 × 2 + 2 × 3 + 4 × 3 = 35

2.给定几个节点,构建一棵哈夫曼树。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了哈夫曼树的考试技巧,实际中的哈夫曼树主要用于文件压缩。

相关文章
|
算法
研究生考试.数据结构与算法之十一 图
研究生考试.数据结构与算法之十一 图
52 0
|
存储 搜索推荐 算法
转:要考试了,排序算法总结看这里
常见的排序算法有:冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序、计数排序、桶排序和基数排序。
70 1
|
25天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
10天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
11天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
11天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
11天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
11天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
27 3
|
22天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。