XingHuiSamaの宝藏之地
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面

数据结构复习——哈夫曼树

2026-04-07 07:00:00
# 数据结构
# 工作

从大学毕业后,读研专业很少涉及到数据结构。因找工作秋招需求,因此再捡回以前遗忘的数据结构知识

哈夫曼树

1. 怎么造一棵哈夫曼树?(核心口诀:每次挑最小的两个)

我们现在有 5 个叶子节点,权值分别是:11、8、6、2、5。 把它们看作是一个池子里的 5 个数字。

  • 第一步:挑池子里最小的两个数(2 和 5) 把它们俩绑在一起,生成一个“父节点”,权值相加 2+5=7。 现在池子里剩下的数字是:11、8、6,以及新合成的 7。
  • 第二步:再从池子里挑最小的两个数(6 和 7) 把它们绑在一起,生成新的父节点 6+7=13。 现在池子里剩下的数字是:11、8,以及新合成的 13。
  • 第三步:继续挑最小的两个数(8 和 11) 绑在一起,生成新父节点 8+11=19。 现在池子里剩下的数字是:13 和 19。
  • 第四步:最后把剩下的 13 和 19 绑在一起 生成最终的根节点 13+19=32。 到这里,只剩一个数字,树就建完了!

2. 什么是带权路径长度(WPL)?怎么算?

  • 路径长度:从最顶上的根节点,走到某个叶子节点,需要经过几条线(向下走几层)。
  • 带权路径长度(WPL):把每个叶子节点的权值 × 它走的层数,然后全部加起来。

我们来看看刚才那棵树里,每个原始叶子节点在第几层:

  • 11 和 8:它们是在第三步直接和 19 绑定的,19 往上直接就是根节点 32,所以它们只往下走了 2 层。
  • 6:它是在第二步和 7 绑成 13,13 往上是根节点 32,它也往下走了 2 层。
  • 2 和 5:它们在第一步绑成 7,7 往上是 13,13 往上是 32,它们在最底下,走了 3 层。

老老实实的标准算法:

WPL=11×2+8×2+6×2+2×3+5×3

WPL=22+16+12+6+15=71

算层数很容易数错眼花,其实数学家早帮我们总结了一个极其简单的“作弊”公式: 一棵哈夫曼树的 WPL,就等于你刚才造树的过程中,所有“新合成的父节点”的权值之和!

我们回头看看刚才造树时,产生过哪些新的父节点? 第一步造了 7,第二步造了 13,第三步造了 19,第四步造了根节点 32。 直接把它们加起来:

WPL=7+13+19+32=71

avatar

XingHuiSama

在代码、学术与分子动力学模拟间穿梭的普通人。近期正埋头于 GROMACS 模拟研究与神经网络计算。

RECOMMENDED

GROMACS 2025 分子动力学模拟初探2222

2026-03-24 07:00:45

Computational Chemistry Tool 工具二介绍

2026-04-01 07:00:23

Leetcode一百题——字母异位词分组

2026-04-07 15:34:18

Table of Contents