以下关于哈夫曼编码的说法,正确的是( )。
哈夫曼编码:每次合并权值最小的两个节点,构建最优二叉树,使带权路径长度(WPL)最小。用于数据压缩。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】哈夫曼树构造|前缀编码定义|编码唯一性判断
本题考查 GESP 六级《数据结构与算法》中"树"模块的前缀编码知识。命题人用"定长编码""唯一性""不能压缩"等绝对化表述,卡住大量死记硬背"哈夫曼=压缩"的考生,迫使你回归算法本质。
哈夫曼编码本质是前缀编码——构造哈夫曼树时,每个字符对应树中某个叶子,任意两叶子路径不同,自然满足"无前缀"。选项 A 错:哈夫曼是变长编码,频率越高的字符编码越短;选项 C 错:合并顺序不同会导致不同哈夫曼树,编码不唯一;选项 D 错:哈夫曼正是经典压缩算法。正确选项 B 直接验证了前缀编码定义。
命题人用"定长""唯一""不能压缩"三个绝对化陷阱:A 利用"树结构"误导你认为长度固定;C 利用"算法确定性"让你忽略合并顺序差异;D 利用"压缩"一词让你误以为哈夫曼不能用于其他场景。最阴险的是 B 的"没有任何一个字符的编码是另一个字符编码的前缀"——这是前缀编码的定义,若只背结论不看树结构,就会把"前缀"理解成"前缀码"的通用属性,而非哈夫曼特有性质。
若把题干改成"以下关于前缀编码的说法正确的是",答案仍是 B,但 C 可能变为"前缀编码一定唯一"(错)或"前缀编码可用于数据压缩"(对)。刷到此类题先问:命题人想考我哪个定义?哈夫曼编码是前缀编码的一种,但前缀编码不一定是哈夫曼编码。