Skip to content

2025年 408 数据结构 第 5 题

数据结构2025年选择题2分

题目

设字符集 S 包含 7 个字符,各字符出现的频次分别是 2, 3, 4, 6, 8, 10, 11。为 S 中的各字符构造哈夫曼编码,编码长度不小于 3 的字符个数是( )。

错因

A

只数到了频次最低的两个字符 2 和 3(位于树的最深层),把它们当作"长编码字符"的全部。事实上深度为 3 的 4、6、8 三个字符同样满足"编码长度不小于 3",被漏掉了。

B

只数到了深度恰为 3 的三个字符(4、6、8),忘记把深度 4 的两个字符(2、3)也算进来。"长度不小于 3"明显包含 4,"≥3 = =3" 是直觉陷阱。

C

数错了某一层叶子的位置,最常见的是把 10 或 11 误归到深度 3:哈夫曼算法里 10、11 分别在 19 = 9+10、25 = 11+14 的合并步中直接接到内部节点上,深度只有 2,不应计入。也可能是数对了深度 3 的 4、6、8 与深度 4 的 2、3,但误以为 2 和 3 共享同一个编码(实际是两个独立字符)。

总解析

思路:用经典 Huffman 算法逐步合并最小两个权值,直到只剩一棵树,再数每个叶子(= 字符)的深度即可。

构造过程(每步从队列里选最小两个合并,结果回插):

步骤合并前队列(升序)取出新合并节点
02, 3, 4, 6, 8, 10, 11
12, 3, 4, 6, 8, 10, 112, 35
24, 5, 6, 8, 10, 114, 59
36, 8, 9, 10, 116, 814
49, 10, 11, 149, 1019
511, 14, 1911, 1425
619, 2519, 2544 (根)

最终哈夫曼树

4419945231025111468

逐叶子数深度(= 编码长度)

字符(频次)深度编码长度
1022
1122
433
633
833
244
344

WPL 交叉验证("内部节点权值之和 = WPL"定理):

直接求和: ✓ 两侧一致,构造无误。

编码长度不小于 3 的字符是 4、6、8、2、3 共 5 个

最终答案是 D

编者注(答案存疑):本题部分参考资料给出答案 C(= 4 个)。从严格的哈夫曼算法推导,本题频次序列无平局,每一步合并都是唯一确定的,最终深度 ≥ 3 的叶子恰好有 5 个(深度 3 的 4、6、8 与深度 4 的 2、3),故答案为 D。如果你看到的参考答案是 C,建议交叉对比——常见错误是漏数了深度 4 的两个最小频次字符 2 和 3。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数