对 hello world 使用霍夫曼编码(Huffman Coding),最少 bit(比特)为( )。
这道题考哈夫曼编码的总码长计算。拿到题先数清字符串里每个字符(含空格)出现几次,再按频率建哈夫曼树,最后把每个字符的频数乘以其对应编码长度求和,别把树深当总位长。
最容易栽跟头的是漏掉空格。字符串中间的空格也是有效字符,若只数字母会少一个字符集元素,导致树结构全变。其次是误把树的高度当成总位长,或者用每个字符固定8位来算。还有可能把'l'看成4次出现,或者把'o'和'l'的频率搞混,这些都会让结果偏离正确答案。
本题考查六级信息学模块中的“信息编码”核心概念——哈夫曼编码。命题人设题的意图很明确:卡住两个基本功。一是字符集的完整性,空格算不算?二是位长计算的本质,不是树深而是总码长。这是区分5级和6级的典型分水岭。
拿到题先数频:字符串'hello world'中,h、e、空格、w、r、d各1次,o出现2次,l出现3次,共8个不同字符。按频率从低到高依次合并:1,1,1,1,1,1,2合并后得到节点序列,最终8个叶子节点的深度分布为:h、e、空格、w、r、d深度为2(6×2=12),o深度为3(2×3=6),l深度为4(3×4=12)。总位长12+6+12=32。记住通法:哈夫曼编码总位长=∑(频×该字符码长),不是树的高度。