【考试必考点——哈夫曼树】(贪心算法实现)
创始人
2024-06-03 14:19:31
0

在这里插入图片描述

文章目录

  • 前言
  • 一、什么是哈夫曼树
    • 二、哈夫曼树相关概念
    • 1.路径
    • 2.路径长度
    • 3.结点的权
    • 4.结点的带权路径长度
  • 三、构建一棵哈夫曼树
    • 考点:
  • 总结


前言

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

一、什么是哈夫曼树

当用 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。

在这里插入图片描述

三、构建一棵哈夫曼树

以该节点为例:
构建哈夫曼树时,用到一个叫做:
贪心算法

即每次都取一个最小的节点和一个次小的节点组成分支
在这里插入图片描述
第一步:取最小的两个节点组成分支,最小节点放在左边,次小节点放在右边,然后生成一个父节点,父节点的val值(不是权值,父节点无权值)是左右两个子节点的权值的和。
在这里插入图片描述
第二步:把该父节点放回列表。在这里插入图片描述
第三步:重新按照第一步取最小节点和次小节点,最小节点放在左边,次小节点放在右边,然后生成一个父节点,父节点的val值是左右两个子节点的权值的和。
在这里插入图片描述
第四步:再次把父节点放回列表,重复第一,第二步,直到列表中没有节点。

最终一棵哈夫曼树生成如下:
在这里插入图片描述

考点:

1.计算整棵树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL”
例如:上面树的带权路径长度为:WPL = 7 × 1 + 5 × 2 + 2 × 3 + 4 × 3 = 35

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

总结

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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...
带头循环双向链表来咯!!! 前言:继上文,我们了解了结构最简单的一种链表---单链表那么我们今天就来...