假设字母表 $\{a,b,c,d,e\}$ 在字符串中出现的频率分别为 $10\%$,$15\%$,$30\%$,$16\%$,$29\%$。若使用哈夫曼编码方式对字母进行二进制编码,则字符 $\tt abcdef$ 分别对应的一组哈夫曼编码的长度分别为( )。
仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】哈夫曼编码|贪心算法|频率排序
🎯 考纲定位:本题在 GESP 六级算法模块,专门卡住那些只会背结论、不会手建树的学生——必须从最小值合并开始,一步步模拟构造过程。
🧠 解题思维:看到题先排序:a(10),b(15),d(16),e(29),c(30)。第一步合并a+b=25,第二步d+e=45,第三步25+c=55,第四步45+55=100。画树:c在左子树根(深度2),a,b在25的子树(深度3),d,e在45的子树(深度2)。对应长度a=3,b=3,c=2,d=2,e=2。通法是"最小堆模拟合并",每次取两个最小节点建树,深度即编码长度。
🪤 陷阱拆解:错误选项A和D把a,b写成4,说明合并顺序错了——其实a+b=25,深度3,不是4。选项C把c写成1,太离谱了。最阴险的是选项B里c=2,d=2,e=2,a=3,b=3,完全符合。如果你只背"频率大的编码短",就会选错——哈夫曼编码长度只跟树结构有关,跟字符名字无关,命题人故意用abcde的顺序来测试你是否真的画对了树。
🔄 反命题思维:如果把c频率改成5%,那c会先被合并,长度变成3,d,e长度变成2。刷到类似题,先问自己"这棵哈夫曼树长什么样",而不是直接算长度。